【问题标题】:redirect to error on exceeding fileupload size超过文件上传大小时重定向到错误
【发布时间】:2011-06-03 07:10:10
【问题描述】:

当最大文件上传大小超过时,我试图将用户引导到错误页面。为此,我正在做以下事情:

public void Init(HttpApplication application)
    {
        application.BeginRequest += new EventHandler(application_BeginRequest);
    }

    void application_BeginRequest(object sender, EventArgs e)
    {
        HttpApplication application = (HttpApplication)sender;
        HttpContext context = application.Context;
        if (context.Request.ContentLength > 4096000)
        {
            context.Response.Redirect("~/Error.aspx");
        }
    }
    public void Dispose()
    {
    }

但在上传大小超过最大文件大小的文件时,它会显示“连接重置”错误。 我该怎么做。

【问题讨论】:

    标签: c# asp.net httpmodule


    【解决方案1】:

    按照post 的原因可能只是重定向到本地站点:

    它似乎不起作用 服务器是本地的(通过使用 本地主机、本地 IP 或 http://machinename/)。浏览器只是 完全像服务器一样反应 断开连接 - 连接 对等方重置/连接已重置 (FF) / 无法显示网页 (IE)。

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        您可以使用工具包AsyncFileUpload控件,然后在客户端捕获错误并重定向到错误页面。

        AsyncFileUpload: How do I hide the max request length exceeded alert error?

        <asp:AsyncFileUpload ID="fileUpload" 
                             runat="server" OnClientUploadError="onUploadError"
                             OnClientUploadComplete="uploadComplete"
                             OnUploadedComplete="OnUploadComplete" />
        
        <script language="javascript" type="text/javascript">
        
             function onUploadError()
             {
                  //Redirect to error page.
             }
        
             function uploadComplete()
             {
        
             }
        
        
         </script>
        

        【讨论】:

        • @Niraj:你能显示一个警告,说上传的文件超过了限制吗?
        【解决方案4】:

        我相信要从处理程序中正确执行此操作,您需要在发送响应/重定向之前从请求中读取所有数据。或者,您可以通过 ISAPI 过滤器执行此操作,而不必读取数据。

        【讨论】:

          【解决方案5】:
          【解决方案6】:

          好的,您可能遇到了 ThreadAbortException,这就是连接被重置的原因。

          有关解决方法,请参阅此知识库文章: ThreadAbortException Occurs If You Use Response.End, Response.Redirect, or Server.Transfer.

          -- 帕维尔

          【讨论】:

            【解决方案7】:

            ASP.NET 运行时可能会在您的应用程序启动之前拒绝该请求。检查 web.config 中设置的最大请求长度 - 该值应该大于您的应用程序所期望的值:

            IIS6/IIS7(经典管道和集成管道):

            <system.web>
              <!-- The value is in KB -->
              <httpRuntime maxRequestLength="4096" />
            </system.web>
            

            IIS7(集成管道):

            <system.webServer> 
              <security> 
                <requestFiltering> 
                  <!-- The value is in bytes -->
                  <requestLimits maxAllowedContentLength="209715200" />
                </requestFiltering>
              </security>
            </system.webServer>
            

            希望这会有所帮助。

            -- 帕维尔

            【讨论】:

            • 我在 context.Response.Redirect("~/Error.aspx") 上放置了一个调试器;它即将到来。
            猜你喜欢
            • 1970-01-01
            • 2019-05-11
            • 1970-01-01
            • 2015-01-20
            • 1970-01-01
            • 2011-07-06
            • 2013-04-04
            • 2022-10-01
            • 1970-01-01
            相关资源
            最近更新 更多