我想将我的所有错误重定向到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();
}
答案 0 :(得分:1)
您可以使用
强制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
};
}
}
}