代码之家  ›  专栏  ›  技术社区  ›  Per Hornshøj-Schierbeck

上载过大文件时显示有意义的错误

  •  3
  • Per Hornshøj-Schierbeck  · 技术社区  · 15 年前

    我们已经对网站上传的文件大小设置了一个固定的限制-低于默认asp.net和iis设置的大小。

    我在Application_BeginRequest中有一个简单的catch设置,可以捕捉到这一点(它不是excat,因为它检查ContentLength,包括所有其他表单数据,但已经足够了)。

    那有什么问题?看来我的回复已经发送给用户了——404解释说找不到该页面。我不想要这种行为,我想要刷新这个响应,因为它不是我想要用户看到的-我想展示其他东西-构建我自己的响应,重定向或只是处理他们应该得到的页面。

    我认为问题可能仍然是IIS拒绝了请求/发布,因为文件比IIS想要的要大。我真的很喜欢这个-一个疯狂的用户试图上传一张20毫克的图片不应该被允许让IIS屈服,但这是真的吗?或者,我是否有机会截获对用户的响应?与其增加IIS上的最大大小,从而在接收此文件时花费大量时间,我只想将此帖子标识为“太大”,并将适当的响应发送回用户。

    3 回复  |  直到 15 年前
        1
  •  3
  •   Richard Richard    15 年前

    伟大的资源!

    我使用上面的链接实现了对上传到服务器的文件的捕获,这些文件太大,被重定向到默认错误页面

    web.config->

        < customErrors mode="RemoteOnly" defaultRedirect="~/GenericError.htm" />
    

        protected void Page_Error(object sender, EventArgs e)
        {
            if (HttpContext.Current.Error is HttpException)
                if ((HttpContext.Current.Error as HttpException).ErrorCode == -2147467259)
                {
                    Server.ClearError();
                    Response.Redirect(@"~/FileSizeError.htm", false);
                }
        }
    
        2
  •  2
  •   Gavin    15 年前

    您可以在此处找到有关此操作的更多信息 http://www.developer.com/db/article.php/10920_3426051_2

        3
  •  0
  •   user1033228    11 年前

    上面的答案在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("/Release/ProjectReleases.aspx?Mode=Create"))
        {
            try
            {
                Response.Redirect("http://anyurl", true);
            }
            catch (HttpException ex)
            {
                if (ex.Message == "Maximum request length exceeded.")
                {
                    Server.ClearError();
                    Response.ClearHeaders();
                    Response.Redirect("http://www.edward-williams.com", true);
                }
            }
        }
    }