【问题标题】:How to redirect from Application_Error in ASP.NET MVC 2?如何从 ASP.NET MVC 2 中的 Application_Error 重定向?
【发布时间】:2010-08-12 20:52:58
【问题描述】:

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

完全没有代码,上传大文件时出现一个非常神秘的“页面无法显示”错误(不是著名的黄色 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 -&gt; HomeController.cs

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

Global.asax

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

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

【问题讨论】:

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


    【解决方案1】:

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

    简而言之,确保没有引发另一个异常并且一切正常。

    与其他张贴者发布的相反,您不必重写整个错误处理块......上帝我讨厌人们这样做。 “哦,我知道你的问题的答案。按照这个例子重新做一遍!”。您如何阅读代码并尝试帮助调试它。如果你不能,那么就不要回应。仅仅因为您正在回答一个问题,并不意味着您比提出问题的人更聪明。

    【讨论】:

      【解决方案2】:

      您可能会发现此帖子中标记为答案的项目很有帮助:How can I properly handle 404 in ASP.NET MVC?

      【讨论】:

        【解决方案3】:

        这是一个很老的问题,我不久前就解决了,虽然我从来没有在这里发布过答案。

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

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

        无论如何,我认为我试图通过 HTML 表单上传大文件,这从根本上是错误的。相反,我实现了一个异步文件上传器,这样我就不必担心这一点——它提供了更好的用户体验,而且我不必再为这个问题摸不着头脑了。

        【讨论】:

          猜你喜欢
          • 2011-07-11
          • 2010-11-30
          • 2011-06-29
          • 1970-01-01
          • 1970-01-01
          • 2011-01-27
          • 2011-03-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多