如何从ASP.NET MVC 2中的Application_Error重定向?

时间:2010-08-12 20:52:59

标签: c# asp.net-mvc-2 redirect error-handling

如果用户尝试上传大于最大请求长度的文件,我想显示自定义错误页面。

在没有代码的情况下,上传大文件(着名的黄色ASP错误页面)时出现了一个非常神秘的“页面无法显示”错误 - 同样的浏览器您离线时会出现错误。这让我很奇怪,可能与这个问题有关。

我将此添加到我的Global.asax文件中:

  //simplification
  public void Application_Error(object sender, EventArgs e)
  {
      Response.Redirect("http://www.google.com", false); //This IS getting hit
  }

我的Web.config文件中的自定义错误已关闭(并且必须保持这种状态)。

看起来很简单吧?但无论出于何种原因,重定向只是没有做任何事情。它受到了打击。它正在执行该行。我已尝试将endResponse设置为true;没有区别。

我在重定向之前尝试了以下两行:

Response.Clear();
Server.ClearError();

我假设的第一个会解决在发送标题后发生的重定向(事实并非如此);第二个我不确定会有什么不同,但我在类似的StackOverflow问题/答案中看到了这个代码,所以我想我会尝试一下。

那么 - 这个特殊的错误是否有一些特殊的东西让重定向变得不可能?

如果你想亲自尝试一下(看看我对非页面奇怪错误的意思),这里有一些快速的copypasta可以添加到VS的标准MVC应用程序中:

Views -> Home -> Index.aspx

<asp:Content ContentPlaceHolderID="MainContent" runat="server">
    <form enctype="multipart/form-data" method="post" action="<%= Url.Action("Upload") %>">
      <input type="file" name="required-to-post" />
      <input type="submit" value="Upload" />
    </form>
</asp:Content>

Controllers -> HomeController.cs

public ActionResult Upload()
{
    return View("Index");
}

Global.asax

protected void Application_Error()
{
    Response.Redirect("http://www.google.com", false);
}

然后只需上传一个大文件(5mb),它应该给出这个神秘的错误(没有重定向)。

3 个答案:

答案 0 :(得分:3)

我能够解决我的问题。错误处理还发送了一封详细说明错误的电子邮件。这是另一个例外。但是这个例外不允许冒泡,所以我无法看到它。

简而言之,确保没有任何事情会引发另一个异常并且一切都应该正常工作。

与其他海报发布的内容相反,你不必重写整个错误处理块...上帝,我恨人们这样做。 “哦,我知道你问题的答案。请按照这个例子重做一遍!”。你怎么读代码并尝试帮助调试它。如果你不能那么只是不回应。仅仅因为你回答了一个问题,这并不意味着你比提出问题的人更聪明。

答案 1 :(得分:0)

您可能会在此帖子中找到标记为答案的项目:How can I properly handle 404 in ASP.NET MVC?

答案 2 :(得分:0)

这是一个非常古老的问题,我刚才解决了这个问题,虽然我从未在这里发过答案。

如果我没记错的话,问题实际上是IIS服务器,而不是MVC应用程序。服务器本身具有最大请求长度,并且当违反此规则时,事情表现得非常奇怪。

通过更改最大服务器请求大小,我相信问题就消失了。但是当我尝试调试MVC应用程序时,我不知道在本地服务器中是否可以启动VS.

无论如何,我认为通过尝试允许通过HTML表单上传大文件,我做了一些根本性的错误。我改为实现了一个异步文件上传器,这样我就不用担心了这个问题 - 它提供了更好的用户体验,而且我不必再为此烦恼了。