首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WebAPI中自定义IActionFilter的返回状态码未授权

WebAPI中自定义IActionFilter的返回状态码未授权
EN

Stack Overflow用户
提问于 2012-12-15 02:10:06
回答 2查看 27.4K关注 0票数 26

我正在使用asp.net WebAPI,我需要创建一个自定义的ActionFilter来进行快速检查,以查看请求URI的用户是否真的能够获取数据。

他们已经被授权通过基本身份验证使用web服务,并且他们的角色已经通过自定义角色提供程序进行了验证。

我需要做的最后一件事是检查他们是否有权限查看他们在URI中使用参数请求的数据。

下面是我的代码:

代码语言:javascript
复制
public class AccessActionFilter : FilterAttribute, IActionFilter
    {

        public System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage> ExecuteActionFilterAsync(HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken, Func<System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage>> continuation)
        {

            var result = //code to see if they have permission returns either 0 or 1

            if (result==0) {
               throw new ArgumentException("You do not have access to this resource");
            }
            return continuation();
        }
    } 

目前我只是抛出了一个错误,这不是我想要的,我宁愿返回System.Net.HttpStatusCode.Unauthorized,但我对我所覆盖的方法有点恼火,我并不完全理解它。

我该如何返回这个值呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-15 02:38:21

你最好坚持使用异常,但是使用HttpResponseException,它也会返回一个Http状态码。

代码语言:javascript
复制
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));

关于这一点,here问得好。

附注:

实现ActionFilterAttribute可能会更简单/更干净

代码语言:javascript
复制
public class AccessActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        var result = //code to see if they have permission returns either 0 or 1

        if (result==0) 
        {
            throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));
        }
        base.OnActionExecuting(actionContext);
    }

}

票数 35
EN

Stack Overflow用户

发布于 2019-02-08 12:46:06

你可以设置状态码而不是抛出异常

代码语言:javascript
复制
public class ExecutionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        var result = 0;//code to see if they have permission returns either 0 or 1

        if (result == 0)
        {
            actionContext.Response = new HttpResponseMessage()
            {
                StatusCode = HttpStatusCode.Unauthorized,
                Content = new StringContent("Unauthorized User")
            };
        }
        base.OnActionExecuting(actionContext);
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13884067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档