我在ASP.NET MVC 5应用程序中使用自定义授权属性,如下所示:
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext context)
{
if (context.HttpContext.Request.IsAuthenticated)
{
context.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
}
else
{
base.HandleUnauthorizedRequest(context);
}
}
}
在system.web
我的web.config部分中,我提到了错误路径,例如:
<system.web>
<customErrors mode="On" defaultRedirect="/Error/Error">
<error statusCode="403" redirect="/Error/NoPermissions"/>
</customErrors>
</system.web>
但是,我永远不会重定向到位于的自定义错误页面/Error/NoPermissions
。而是浏览器显示常规错误页面,显示“ HTTP错误403.0-禁止”。
谢谢大家,但是问题不在于403代码。实际上,问题出在我尝试返回403的方式上。我只是将代码更改为抛出anHttpException
而不是返回,所以HttpStatusCodeResult
现在一切正常。我可以通过抛出HttpException
异常来返回任何HTTP状态代码,而我的customErrors
配置可以捕获所有这些状态代码。可能HttpStatusCodeResult
没有做我期望的确切工作。
我刚更换
context.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
与
throw new HttpException((int)System.Net.HttpStatusCode.Forbidden, "Forbidden");
而已。
快乐的编码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句