无论如何在投掷404之前避免302重定向?

时间:2018-06-04 10:59:57

标签: asp.net-mvc http-status-code-404

在MVC中,定义了customErrors路径在statusCode 404上,它按预期工作但在404之前返回状态代码302。

我们可以避免临时重定向吗?

1 个答案:

答案 0 :(得分:0)

您正在寻找的是web.config的customErrors标记上的属性redirectMode =“ResponseRewrite”。不幸的是,它只适用于aspx,并不适用于ASP.NET MVC。

因此,要在MVC中实现所需,您必须处理错误以编写所需的响应。

Global.asax.cs中的

protected void Application_Error(object sender, EventArgs e)
{
    HttpException httpException = Server.GetLastError().GetBaseException() as HttpException;

    if (httpException != null)
    {
        if (httpException.GetHttpCode() == 404)
        {
            RouteData routeData = new RouteData();
            Response.Clear();
            Server.ClearError();
            routeData.Values.Add("controller", "Errors");
            routeData.Values.Add("action", "Error404");
            var requestContext = new RequestContext(new HttpContextWrapper(Context), routeData);
            var controller = ControllerBuilder.Current.GetControllerFactory().CreateController(requestContext, "Errors");

            controller.Execute(requestContext);
        }
    }
}

此代码将处理404错误,并在ErrorsController上调用Error404操作而不进行重定向。