![](/img/trans.png)
[英]Why ASP.NET MVC sometimes returns error status code 500 and sometimes error status code 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.