我使用自定义ClaimsAuthorizationManager
在Web API 2项目中实现授权
为此,将覆盖CheckAccess()
方法以确定是否应允许当前主体访问,并返回相应的布尔值。问题是返回false
会导致Exception
被抛出,结果为500 Internal Server Error
,而期望的结果是401 Unauthorized
(或者{{1} }}?)。
是否有办法覆盖失败的声明验证的结果,以便它返回正确的" HTTP响应而不是全能500?
答案 0 :(得分:2)
基于这两篇文章:
您可以实现自己的ExceptionFilterAttribute
,类似这样的
public class SecurityExceptionFilterAttribute : System.Web.Http.Filters.ExceptionFilterAttribute
{
public override void OnException(System.Web.Http.Filters.HttpActionExecutedContext actionExecutedContext)
{
if (actionExecutedContext.Exception is System.Security.SecurityException)
{
actionExecutedContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
return;
}
base.OnException(actionExecutedContext);
}
}
然后在Global.asax
文件中将此过滤条件添加到HttpConfiguration
:
config.Filters.Add(new SecurityExceptionFilterAttribute());