1

假设某人:

  1. 访问和 ASPX 页面(http 获取请求)。
  2. 在文件上传器中设置“太大”的文件并单击上传按钮(http 发布请求)。

我不在乎提供自定义错误页面;这很愚蠢,并且会破坏应用程序。

我想以编程方式处理错误。它可以被 global.asax 的 Application_BeginRequest 处理程序拦截(我认为是在收到整个请求之后),如此处发布

我想做的是从请求中删除过大的文件,在“HttpContext.Current.Items[”filetoolarge”] = true”之类的东西中设置某种标志,然后执行 Server.Transfer 到同一页面,这样请求就好像文件从未发送过一样运行,除了现在有这个错误标志,页面当然会检查并在找到时显示一个很好的错误消息。

这可以做到吗?

4

3 回答 3

0

maxRequestLength在你的web.config中设置一个像这样的大值:

<system.web>
        <httpRuntime maxRequestLength="26000" executionTimeout="600"/>
</system.web>

这样你就可以收到大文件了。然后像这样处理它:

        If fileUploader.PostedFile.ContentLength > theSize Then
            'show error'
        else
            'process it'
        End If

希望能帮助到你。

更新:

maxRequestLength以 KB 为单位。

PostedFile.ContentLength以字节为单位。

于 2011-04-12T22:31:06.800 回答
0

我在这里发布了解决方案:在哪里捕获和处理 IIS7 中超出的 maxAllowedContentLength?

我的解决方案涉及覆盖页面的 OnError 处理程序,我认为它仅适用于 .NET 4.0,因为它涉及将最后一个异常作为 HttpException 并检查 WebEventCode 属性,这在 .NET 4.0 框架中似乎是新的。

还有另一个解决方案涉及拦截 Application_EndRequest 全局应用程序处理程序,其中 StatusCode 和 SubStatusCode 属性值都可用,但我认为它不起作用,因为在 EndRequest 时响应可能已经被刷新到客户端引发事件。

根据我的经验,OnError 和 Application_EndRequest 方法都几乎立即运行,早在服务器可能接收到整个请求之前,它可能会由于有关请求大小的一些早期警告而被触发。

我已经测试了 OnError 方法,除了不可避免的延迟,浏览器坚持在处理和显示服务器响应之前完成其请求的上传之外,它可以完美运行。

可以在此处找到有关 Web 事件代码的信息 - http://msdn.microsoft.com/en-us/library/ff650306.aspx

于 2011-04-14T21:53:25.000 回答
0

我知道如何在不使用 Flash 或 ActiveX 的情况下执行此操作的唯一方法是将 maxRequestLength 设置为较高的值,然后在文件可用时使用 JavaScript 访问有关文件的信息,然后处理取消/错误处理。我使用Telerik 上传控件来执行此操作,但您应该能够执行类似的操作。

于 2011-04-12T21:42:40.777 回答