繁体   English   中英

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

[英]How to redirect from Application_Error in ASP.NET MVC 2?

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

完全没有代码,当上传大文件时( 不是著名的黄色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应用程序中添加一些快速复制方法:

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),它就应该给出这个神秘的错误(无需重定向)。

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

简而言之,请确保没有任何异常引发任何异常,并且一切正常。

与其他张贴者相反,您不必重写整个错误处理块...当人们这样做时,我讨厌我。 “哦,我知道您问题的答案。仅在此示例之后重做!”。 您如何阅读代码并尝试帮助对其进行调试。 如果不能,那就不要回应。 仅仅因为您正在回答一个问题,并不意味着您比问这个问题的人更聪明。

您可能会发现此帖子中标记为答案的项目很有帮助: 如何在ASP.NET MVC中正确处理404?

这是一个很老的问题,尽管我从未在这里发布答案,但我还是解决了一段时间。

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

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

无论如何,我相信我试图通过HTML表单上传大文件,这在根本上是错的。 相反,我实现了一个异步文件上传器,因此我不必为此担心-它提供了更好的用户体验,而且我也不必为此再费力气了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM