我正在使用asp.net WebAPI,我需要创建一个自定义的ActionFilter来进行快速检查,以查看请求URI的用户是否真的能够获取数据。
他们已经被授权通过基本身份验证使用web服务,并且他们的角色已经通过自定义角色提供程序进行了验证。
我需要做的最后一件事是检查他们是否有权限查看他们在URI中使用参数请求的数据。
下面是我的代码:
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
,但我对我所覆盖的方法有点恼火,我并不完全理解它。
我该如何返回这个值呢?
发布于 2012-12-15 02:38:21
你最好坚持使用异常,但是使用HttpResponseException,它也会返回一个Http状态码。
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));
关于这一点,here问得好。
附注:
实现ActionFilterAttribute
可能会更简单/更干净
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);
}
}
发布于 2019-02-08 12:46:06
你可以设置状态码而不是抛出异常
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);
}
}
https://stackoverflow.com/questions/13884067
复制相似问题