Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
上载超过Asp.net请求长度限制的文件?_Asp.net_Upload_File Upload - Fatal编程技术网

上载超过Asp.net请求长度限制的文件?

上载超过Asp.net请求长度限制的文件?,asp.net,upload,file-upload,Asp.net,Upload,File Upload,我搜了这么多,找到了,但这不完全是我要问的。我想知道是否可以创建一个IHttpModule来检查请求的ContentLength,如果可以的话,可以重定向或以某种方式抛出该请求并创建一个新的请求 具体地说,我正在尝试处理图像文件上载,但我希望请求继续到上载页面,并带有某种警告,而不是简单的错误页面。我有一段代码被一个大请求击中: private void context_BeginRequest(object sender, EventArgs e) { Http

我搜了这么多,找到了,但这不完全是我要问的。我想知道是否可以创建一个IHttpModule来检查请求的ContentLength,如果可以的话,可以重定向或以某种方式抛出该请求并创建一个新的请求

具体地说,我正在尝试处理图像文件上载,但我希望请求继续到上载页面,并带有某种警告,而不是简单的错误页面。我有一段代码被一个大请求击中:

    private void context_BeginRequest(object sender, EventArgs e)
    {
        HttpApplication application = (HttpApplication)sender;
        HttpContext context = application.Context;

        if (context.Request.ContentLength > (4 * 1024 * 1024))
        {

        }
    }
执行路径像我希望的那样进入这个IF块。但从这里开始,我真的不知道该去哪里。这是一个糟糕的方法吗


编辑:实际上(没有此模块),Fiddler报告IIS返回500代码。我想避免这一点,让代码从所请求的页面返回200,就像我所说的警告一样。

给出一个阅读

给出一个阅读

< p>如果你想做的就是给用户关于大图片上传状态的反馈,那么我建议你考虑使用一个基于Ajax或Flash的上传组件。大约有一百万个这样的网站,大多数都有很好的用户反馈。他们也可以处理大型文件,同时也处理多个同时上传文件。

如果你想做的就是给用户关于大图片上传状态的反馈,那么我建议你考虑使用一个基于Ajax或Flash的上传组件。大约有一百万个这样的网站,大多数都有很好的用户反馈。它们还可以处理大型文件,许多还可以同时处理多个文件上载。

由于HTTP的性质,在读取所有请求数据之前,您实际上无法返回任何内容。当您收到过大的请求时,您有两个选择:

  • 读入所有数据,然后返回一个不错的错误页面。这听起来不错,但意味着用户必须等待上传完成,然后才能收到无法上传的消息。它还打开了一个可能的DOS攻击漏洞
  • 立即终止请求。这给了用户一个糟糕的断开连接页面,但保留了安全性

还有第三种选择——使用一个高级组件,它既能提供良好的错误消息,又能提供安全性。你可以只使用flash组件,而且有很多组件,但是当然,如果用户没有flash,那你就倒霉了。

由于HTTP的性质,在读取所有请求数据之前,你实际上无法返回任何内容。当您收到过大的请求时,您有两个选择:

  • 读入所有数据,然后返回一个不错的错误页面。这听起来不错,但意味着用户必须等待上传完成,然后才能收到无法上传的消息。它还打开了一个可能的DOS攻击漏洞
  • 立即终止请求。这给了用户一个糟糕的断开连接页面,但保留了安全性

还有第三种选择——使用一个高级组件,它既能提供良好的错误消息,又能提供安全性。你可以只使用flash组件,而且有很多组件,但是当然,如果用户没有flash,你就不走运了。

上面的答案对我在IIS 7.5上不起作用。我们最终得出以下结论:

    void Application_PreSendRequestHeaders(Object sender, EventArgs e)
    {
        if (
            Request.Headers["Content-Length"] != null && 
            int.Parse(Request.Headers["Content-Length"]) > 150000000 &&
            Request.RawUrl.EndsWith("/ProjectReleases.aspx?Mode=Create", StringComparison.OrdinalIgnoreCase))
        {
            try
            {
                Response.Redirect("http://anyurl", true);
            }
            catch (HttpException ex)
            {
                if (String.Compare(ex.Message, "Maximum request length exceeded.", StringComparison.Ordinal) != 0)
                {
                    Server.ClearError();
                    Response.ClearHeaders();
                    Response.Redirect("http://www.edward-williams.com", true);
                }
            }
        }
    }

不必修改最大上载大小。授予最终版本实际上是基于web.config中的值为最大上载大小设置一个静态值,并重定向到与该主页相对的自定义错误页,但您明白了。

以上答案对我在IIS 7.5上不起作用。我们最终得出以下结论:

    void Application_PreSendRequestHeaders(Object sender, EventArgs e)
    {
        if (
            Request.Headers["Content-Length"] != null && 
            int.Parse(Request.Headers["Content-Length"]) > 150000000 &&
            Request.RawUrl.EndsWith("/ProjectReleases.aspx?Mode=Create", StringComparison.OrdinalIgnoreCase))
        {
            try
            {
                Response.Redirect("http://anyurl", true);
            }
            catch (HttpException ex)
            {
                if (String.Compare(ex.Message, "Maximum request length exceeded.", StringComparison.Ordinal) != 0)
                {
                    Server.ClearError();
                    Response.ClearHeaders();
                    Response.Redirect("http://www.edward-williams.com", true);
                }
            }
        }
    }

不必修改最大上载大小。授予最终版本时,实际上会根据web.config中的值为最大上载大小设置一个静态值,并重定向到该主页的自定义错误页,但您明白了。

这就是rm提供的链接在循环中调用ReadEntityBody的原因吗?是的,没错。它读取整个请求,以便随后发送响应。这就是rm提供的链接在循环中调用ReadEntityBody的原因吗?是的,没错。它读取整个请求,以便在之后发送响应。