gpt4 book ai didi

c# - MVC5 抛出 401 的 HttpException 返回 500

转载 作者:行者123 更新时间:2023-11-30 18:46:00 24 4
gpt4 key购买 nike

我试图抛出 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 自定义页面的其他解决方案有什么想法吗?

谢谢

最佳答案

你应该尝试这样做

public ActionResult Error401()
{
return new HttpStatusCodeResult(HttpStatusCode.Forbidden, "Forbidden");
}

那么你不需要每次都抛出异常,因为它的代价更高。

关于c# - MVC5 抛出 401 的 HttpException 返回 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34198151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com