我正在使用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
但是我对我压倒的方法感到有点恼火,我完全不理解它。
我将如何返回该值?
答案 0 :(得分:30)
您可能最好坚持异常,但使用HttpResponseException也将返回Http状态代码。
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));
关于这一点的好问题here。
P.S。
实施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);
}
}
答案 1 :(得分:2)
您可以设置状态代码,而不是引发异常
fullfilment_text