捕获IIS级别错误以在ASP.NET中处理

Jus*_*n C 3 asp.net iis iis-7 iis-6 web-applications

我正在IIS 7上使用C#开发一个ASP.NET站点,但我希望得到一个适用于IIS 6的答案.该网站的一部分是一次最多上传5张图片.我有一个很好的算法来调整上传到我的最佳大小和比例的图像.

所以我唯一的实际尺寸限制是在初始上传期间.我修改了我的web.config,将数据包限制从4MB提高到32MB.在大多数情况下,这会解决我的问题.

我的问题出现在极少数情况下,用户试图加载超过我的限制.我可以提高限制,但用户总有可能找到5个更大的文件.如果用户选择较大的文件,我的try/catch块不会处理错误.错误来自IIS.

那么如何才能捕获C#代码中的错误,我可以对ASP.NET接口进行修改,以通知用户选择较小的文件,而不是看到一个讨厌的错误屏幕?

Gab*_*ams 7

超过请求长度时,您可以访问异常.使用HttpModule,并为Error事件添加处理程序.

异常类型为:System.Web.HttpUnhandledException(InnerException类型为:System.Web.HttpException).

要捕获此异常,请将其添加到web.config:

<httpModules>
    <add name="ErrorHttpModule" type="ErrorHttpModule"/>
</httpModules>
Run Code Online (Sandbox Code Playgroud)

并将此类添加到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
}
Run Code Online (Sandbox Code Playgroud)