我正在IIS 7上使用C#开发一个ASP.NET站点,但我希望得到一个适用于IIS 6的答案。该网站的一部分是一次最多上传5张图片。我有一个很好的算法来调整上传到我的最佳大小和比例的图像。
所以我唯一的实际尺寸限制是在初始上传期间。我修改了我的web.config,将数据包限制从4MB提高到32MB。在大多数情况下,这会解决我的问题。
我的问题是在极少数情况下用户尝试加载超过我的限制。我可以提高限制,但用户总有可能找到5个更大的文件。如果用户选择较大的文件,我的try / catch块不会处理错误。错误来自IIS。
那么如何在C#代码中捕获错误,我可以在其中修改我的ASP.NET界面以通知用户选择较小的文件而不是看到一个讨厌的错误屏幕?
答案 0 :(得分:6)
超过请求长度时,您可以访问异常。使用HttpModule,并为Error事件添加处理程序。
异常的类型为:System.Web.HttpUnhandledException(InnerException类型为:System.Web.HttpException)。
要捕获此异常,请将其添加到web.config:
<httpModules>
<add name="ErrorHttpModule" type="ErrorHttpModule"/>
</httpModules>
将此类添加到App_Code文件夹:
public class ErrorHttpModule : IHttpModule
{
private HttpApplication _context;
public ErrorHttpModule() {
}
private void ErrorHandler(Object sender, EventArgs e)
{
Exception ex = _context.Server.GetLastError();
//You can also call this to clear the error
//_context.Server.ClearError();
}
#region IHttpModule Members
public void Init(HttpApplication context)
{
_context = context;
_context.Error += new EventHandler(ErrorHandler);
}
public void Dispose()
{
}
#endregion
}
答案 1 :(得分:2)
如果您使用的是传统的asp:FileUpload控件,那么之前无法检查文件的大小。但是,您可以使用Flash或Silverlight方法。我建议的一个选项是Uploadify
答案 2 :(得分:1)
我不确定这是否可行,但至少在IIS 7中,您可能会尝试在配置为运行静态文件的HttpModule中捕获Error
事件。从那里,您可以重定向到适当的错误页面。
答案 3 :(得分:1)
您可以在Global(global.asax.cs文件)中捕获这些内容。添加Application_Error处理程序 - 您将获得HttpUnhandledException。它的InnerException将是一个HttpException,消息“超出最大请求长度”。
但是,在页面代码加载或执行之前会处理这些错误,因此您的页面无法捕获异常或知道它发生过。捕获此异常后,您可以在会话中粘贴一条消息以供稍后显示。您也可以从Global调用response.Redirect来显示新页面,或者使用Session中的错误消息重新显示原始页面。