MVC5 抛出 401 的 HttpException 返回 500
Posted
技术标签:
【中文标题】MVC5 抛出 401 的 HttpException 返回 500【英文标题】:MVC5 throw HttpException of 401 returns 500 【发布时间】:2016-03-15 20:49:38 【问题描述】:我正在尝试抛出 401 HttpException,但应用程序总是返回 500 而不是 401。当我抛出其他 4XX 错误时不会发生这种情况。
public ActionResult Error401()
throw new HttpException(401, "Unauthorized");
我正在尝试为 500、404、403、400 和 401 创建自定义错误页面。对于除 401 之外的所有错误,我都会获得正确的页面,对于 401,我会进入浏览器 500 错误和 500 自定义错误页面。
<system.web>
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/CustomErrors/InternalServerError.aspx">
<error statusCode="500" redirect="~/CustomErrors/InternalServerError.aspx" />
<error statusCode="404" redirect="~/CustomErrors/NotFound.aspx" />
<error statusCode="403" redirect="~/CustomErrors/Forbidden.aspx" />
<error statusCode="400" redirect="~/CustomErrors/BadRequest.aspx" />
<error statusCode="401" redirect="~/CustomErrors/Unauthorized.aspx" />
</customErrors>
</system.web>
public class ErrorHandleAttribute : HandleErrorAttribute
public override void OnException(ExceptionContext filterContext)
if (filterContext.HttpContext.IsCustomErrorEnabled == false)
return;
object exception = filterContext.Exception;
int httpStatusCode = (exception as HttpException).GetHttpCode();
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.SuppressFormsAuthenticationRedirect = true;
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
filterContext.HttpContext.Response.StatusCode = httpStatusCode;
对于返回正确的 401 自定义页面的其他解决方案有什么想法吗?
谢谢
【问题讨论】:
您是否注册了自定义错误属性? 是的,它已注册,我得到了 401 旁边的所有自定义错误页面。 【参考方案1】:你应该尝试这样做
public ActionResult Error401()
return new HttpStatusCodeResult(HttpStatusCode.Forbidden, "Forbidden");
那你就不用每次都抛出异常了,因为代价更高。
【讨论】:
这似乎是一个解决方案,但它不会通过我的 ErrorHandle 过滤器。它也等同于 - return new HttpStatusCodeResult(HttpStatusCode.Unauthorized, "Unauthorized");并且要返回自定义错误页面,它需要在 httpErrors (IIS) 部分的 web.config 中进行更多配置。我需要通过错误处理过滤器的东西。以上是关于MVC5 抛出 401 的 HttpException 返回 500的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot Security 不会抛出 401 Unauthorized Exception but 404 Not Found
Spring-Security:AuthenticationManager 抛出 BadCredentialsException 时返回状态 401
Asp.Net MVC 5 Owin Twitter Auth 抛出 401 异常
当为不受限制的端点发送授权标头时,Springboot webflux 抛出 401