【问题标题】:can i redirect from the global.asax to controller action?我可以从 global.asax 重定向到控制器操作吗?
【发布时间】:2011-10-05 22:05:39
【问题描述】:

当用户上传超过限制的文件时,我试图显示错误页面(请参阅Catching "Maximum request length exceeded"

在 global.asax 中我想重定向到控制器动作,所以像这样但它不起作用?:

private void Application_Error(object sender, EventArgs e)
{
    if (GlobalHelper.IsMaxRequestExceededEexception(this.Server.GetLastError()))
    {
        this.Server.ClearError();
        return RedirectToAction("Home","Errorpage");
    }
}

【问题讨论】:

    标签: asp.net-mvc-2 c#-4.0


    【解决方案1】:

    试试这样:

    protected void Application_Error()
    {
        var exception = Server.GetLastError();
        // TODO: Log the exception or something
        Response.Clear();
        Server.ClearError();
    
        var routeData = new RouteData();
        routeData.Values["controller"] = "Home";
        routeData.Values["action"] = "ErrorPage";
        Response.StatusCode = 500;
        IController controller = new HomeController();
        var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
        controller.Execute(rc);
    }
    

    【讨论】:

    • 我在 Session_Start() 中使用上述代码。当身份验证失败时,我在重定向到 authenticationfalure.aspx 页面时使用它。但是,主页和失败页面都像输出一样出现。如何解决这个问题?
    • @Darin Dimitrov 我如何将参数传递给操作方法。我想以某种方式传递“异常”变量。
    • @mathinvalidnik,您可以轻松地将异常作为 RouteData 值传递,如我在此答案中所示:stackoverflow.com/a/5229581/29407
    • @DarinDimitrov 我会试试这个。 IController.Execute 的奇怪之处在于它实际上并没有改变 url。
    • @DarinDimitrov 感谢您的解决方案。我们需要定义 StatusCode 吗?如果我们这样做,我们会在谷歌网站管理员工具报告中得到它吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 2013-06-20
    • 1970-01-01
    相关资源
    最近更新 更多