C# 如何从ASP.NET MVC 2中的应用程序错误重定向?

C# 如何从ASP.NET MVC 2中的应用程序错误重定向?,c#,asp.net-mvc-2,redirect,error-handling,C#,Asp.net Mvc 2,Redirect,Error Handling,如果用户试图上传大于最大请求长度的文件,我想显示一个自定义错误页面 由于没有任何代码,我在上传一个大文件时出现了一个非常神秘的“页面无法显示”错误(不是著名的黄色ASP错误页面)——与脱机时出现的浏览器错误相同。这让我觉得很奇怪,可能与这个问题有关 我将其添加到我的Global.asax文件中: //simplification public void Application_Error(object sender, EventArgs e) { Response.Red

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

由于没有任何代码,我在上传一个大文件时出现了一个非常神秘的“页面无法显示”错误(不是著名的黄色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问题/答案中看到了这段代码,所以我想我应该试试

那么,这个特殊的错误是否有什么特殊的地方使得重定向不可能呢

如果你想自己尝试一下(看看我说的“非页面错误”是什么意思),下面是一些可以添加到VS标准MVC应用程序中的快速复制:

视图->主页->索引.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>
Global.asax

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

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

你可能会发现这个帖子中标记为答案的项目很有帮助:

你可能会发现这个帖子中标记为答案的项目很有帮助:

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

简言之,确保没有引发其他异常,所有异常都应该正常工作


与其他海报所张贴的相反,你不必重写你的整个错误处理块……天哪,我讨厌人们那样做。“哦,我知道你问题的答案。按照这个例子重做就行了!”。不如您阅读代码并尝试帮助调试它。如果你不能,那就不要回应。仅仅因为你在回答一个问题,并不意味着你比提问的人更聪明。

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

简言之,确保没有引发其他异常,所有异常都应该正常工作


与其他海报所张贴的相反,你不必重写你的整个错误处理块……天哪,我讨厌人们那样做。“哦,我知道你问题的答案。按照这个例子重做就行了!”。不如您阅读代码并尝试帮助调试它。如果你不能,那就不要回应。仅仅因为你在回答一个问题,并不意味着你比提问的人更聪明。

这是一个非常古老的问题,我不久前解决了这个问题,尽管我从未在这里发布过答案

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

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


在任何情况下,我认为我试图通过HTML表单上传大文件是犯了根本错误。相反,我实现了一个异步文件上传程序,这样我就不必担心这个问题了——它提供了更好的用户eXercience,我也不必再为这个问题费心了。

这是一个非常老的问题,也是我不久前解决的问题,尽管我从未在这里发布过答案

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

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

在任何情况下,我认为我试图通过HTML表单上传大文件是犯了根本错误。相反,我实现了一个异步文件上传程序,这样我就不必担心这个问题了——它提供了更好的用户eXercience,我再也不用为这个费心了

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