当应用程序中发生任何异常时,我正在尝试重定向到asp.net mvc5的global.asax文件中的错误页面。执行Response.Redirect行后,什么都没有发生。

它根本不会重定向到错误页面,该错误页面在~~ View \ Shared \ Error.cshtml路径中可用

protected void Application_Error(object sender, EventArgs e)
{
    Server.ClearError();
    Response.Clear();
    HttpContext.Current.Response.Redirect("~\View\Shared\Error.cshtml");
   //return;
}


在webconfig中

<system.web>
    <customErrors mode="On" defaultRedirect="~\View\Shared\Error.cshtml" />
</system.web>


我不确定出了什么问题。

我的错误控制器:

public class ErrorController : Controller
    {
        // GET: Error
        public ActionResult Error()
        {
            return View("Error");
        }

    }

最佳答案

我不建议您使用Global.asax,除非您有一些自定义逻辑。我建议使用web.config。请注意,由于MVC使用路由而不是物理文件,因此您应该在web.config中使用如下所示的内容:

<httpErrors errorMode="Custom"> <remove statusCode="404"/> <error statusCode="404" path="/error/404" responseMode="ExecuteUrl"/><httpErrors>

但是,如果您要调用某个物理文件(例如html),则应以这种方式使用它:

<httpErrors errorMode="Custom"> <remove statusCode="404"/> <error statusCode="404" path="/erro404.html" responseMode="File"/><httpErrors>

现在,回到自定义逻辑。如果您确实需要使用Global.asax,我建议您使用以下代码:

protected void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
    Response.Clear();

    HttpException httpException = exception as HttpException;

    RouteData routeData = new RouteData();
    routeData.Values.Add("controller", "Error");

    if (httpException == null)
    {
        routeData.Values.Add("action", "Index");
    }
    else //It's an Http Exception, Let's handle it.
    {
        switch (httpException.GetHttpCode())
        {
            case 404:
                // Page not found.
                routeData.Values.Add("action", "HttpError404");
                break;
            case 500:
                // Server error.
                routeData.Values.Add("action", "HttpError500");
                break;

            // Here you can handle Views to other error codes.
            // I choose a General error template
            default:
                routeData.Values.Add("action", "General");
                break;
        }
    }

    // Pass exception details to the target error View.
    routeData.Values.Add("error", exception);

    // Clear the error on server.
    Server.ClearError();

    // Avoid IIS7 getting in the middle
    Response.TrySkipIisCustomErrors = true;

    // Call target Controller and pass the routeData.
    IController errorController = new ErrorController();
    errorController.Execute(new RequestContext(
            new HttpContextWrapper(Context), routeData));
}

关于c# - asp.net mvc Response.Redirect在global.asax中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28068559/

10-15 15:38