繁体   English   中英

在MVC中将状态代码500更改为404

[英]change status code 500 to 404 in mvc

我想将所有错误重定向到mvc 4中状态码为404的一个动作,我已将其设置为Web配置,但是当发生内部错误时,页面将重定向到我的404动作,但状态码为500

 <customErrors defaultRedirect="/_404" mode="On" redirectMode="ResponseRewrite">

    <error statusCode="404"
       redirect="http://www.khanoumi.com/_404"/>
<error statusCode="500"
       redirect="http://www.khanoumi.com/_404"/>
  </customErrors>

这也是我的行动:

 public ActionResult Index()
        {
            Server.ClearError();
            Response.Clear();
            Response.ClearHeaders();
            Response.StatusCode = 404;
            Response.TrySkipIisCustomErrors = true;
            return View();
        }

您可以通过使用强制404错误

throw new HttpException(404, "Your error message");

或对于Asp.Net MVC 4,您可以使用:

if (condition)
{
    return HttpNotFound("Your error message");
}

您也可以为此创建自定义属性,如下所示:

public class HandleNotFoundAttribute : ActionFilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        var httpException = filterContext.Exception.GetBaseException() as HttpException;
        if (httpException != null && (httpException.GetHttpCode() == 404 ||
                                      httpException.GetHttpCode() == 500))
        {
            filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
            filterContext.ExceptionHandled = true;
            filterContext.HttpContext.Response.StatusCode = (int) HttpStatusCode.NotFound;
            filterContext.Result = new ViewResult
                                {
                                  ViewName = "404",
                                  ViewData = filterContext.Controller.ViewData
                                };
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM