我的主要问题是,当上传的文件超过允许的大小(web.config中的maxRequestLength)时,我想显示一个自定义错误页面.

当上传大文件时,在调用控制器中的上载操作方法之前,会引发一个HttpException.这是意料之中的.

我试图在自定义属性中捕获异常,并在控制器中重写OneException.为什么不能在属性或OneException方法中捕获异常?

不过,在全局应用程序中捕获异常是可能的.尽快,但都没有react .重定向nor服务器.传输用于重定向到自定义错误页面.

有什么 idea 吗?

提前谢谢!

马库斯

推荐答案

在IIS7及以上运行时,还有另一个参数:

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="10485760" />
    </requestFiltering>
  </security>
</system.webServer>

默认设置略小于30 MB.

对于大小在maxRequestLengthmaxAllowedContentLength之间的上传文件,IIS7将抛出一个HttpException,HTTP代码为500,消息文本为Maximum request length exceeded.当引发此异常时,IIS7会立即终止连接.因此,仅当在global.asax.cs的Application_Error()中处理并清除了HttpException(使用Server.ClearError())时,重定向到此错误的HttpModule才能工作.

对于大小大于maxAllowedContentLength的上载文件,IIS7将显示详细的错误页面,错误代码为404和subStatusCode 13.错误页面可在C:\inetpub\stemerr\en-US\404-13.htm中找到

对于IIS7上此错误的重定向,我建议改为在httpErrors上重定向.

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Replace"> 
    <remove statusCode="404" subStatusCode="13" /> 
    <error statusCode="404" subStatusCode="13" prefixLanguageFilePath=""
       path="http://yoursite.com/Error/UploadTooLarge" responseMode="Redirect" /> 
  </httpErrors>
</system.webServer>

Asp.net相关问答推荐

如何在运行时判断动态数据类型的类型?

/应用程序中的服务器错误. ASP.NET

如何防止 Azure 网站进入Hibernate 状态?

取消选中时 ASP.NET CheckBox 不会触发 CheckedChanged 事件

如何判断 IIS 是处于 32 位还是 64 位模式

使用域用户的 SQL 连接字符串?

为什么我不能在 ASP.net MVC 中使用服务器控件?

在不知道键名的情况下访问 JSON 对象的元素

如何防止 XXE 攻击(.NET 中的 XmlDocument)

如何在 ASP.NET MVC 中启用跨源请求

如何删除asp.net中的特定会话?

如何在 ASP.NET 中设置下拉列表项?

Fiddler 没有从 ASP.NET 网站嗅探 SOAP 流量

如何在 GridView 中隐藏 TemplateField 列

使用 Twitter Bootstrap 在 @html.actionlink 中显示 html

当文件上传超出 ASP.NET MVC 中允许的大小时显示自定义错误页面

简单的 LINQ 和列表错误:WhereListIterator`1[Task]' to type 'System.Collections.Generic.List`1[Task]'

ASP.net 网站中的 C# 密码文本框

使用 jQuery 从 asp:RadioButtonList 读取选定的值

如何使用实体框架执行原始 SQL 查询而无需使用模型?