【问题标题】:Displaying a meaningfull error when uploading too large a file上传过大文件时显示有意义的错误
【发布时间】:2009-05-05 09:00:41
【问题描述】:

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

我在 Application_BeginRequest 中有一个简单的捕获设置来捕获这个(它不是 excat,因为它检查 ContentLength 包括所有其他表单数据,但它已经足够好了)。 我想恢复处理用户尝试上传到的页面,或者作为后备计划将用户重定向到一个页面,解释文件大小太大(我们已经有一个解释这一点的字幕,但你知道用户 - '他们不需要阅读没有臭味的字幕')。

那么问题是什么?好吧,似乎我的响应已发送给用户 - 一个 404 说明找不到该页面。我不想要这种行为,我想刷新这个响应,因为它不是我希望用户看到的——我想展示别的东西——建立我自己的响应、重定向或只是处理他们应该得到的页面无论如何。

我认为问题可能仍然是 IIS 拒绝请求/发布,因为文件比 IIS 想要的要大。我真的很喜欢这个 - 一个试图上传 20meg 图片的疯狂用户不应该被允许对 IIS 进行 DoS 攻击,但这是真的吗?或者我是否有机会拦截对用户的响应 - 而不是增加 IIS 上的最大大小并因此花费带宽来接收此文件,我只想将此帖子标识为“太大”并发送适当的响应返回给用户。

【问题讨论】:

标签: asp.net file-upload


【解决方案1】:

很棒的资源!

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

web.config ->

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

MyPage.aspx.cs ->

    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);
            }
    }

【讨论】:

  • 我不需要在 web.config 中实现 customErrors,但是将这个 Page_Error 方法直接放在页面上正是我需要解决的错误“发送 http 标头后无法重定向”,我当用户根据 web.config 中设置的 maxRequestLength 上传一个太大的文件时,试图在 Global.asax 中执行此操作。我只是让它重定向到页面并在我放在页面本身的错误消息上显示。
【解决方案2】:

我遇到了同样的问题,经过大量搜索似乎没有完美的解决方案。您可以更改最大请求长度以设置 IIS 将在哪个点处理 ASP.Net 错误。您还可以在 global.asax 上捕获此错误并向用户显示更友好的错误页面。

你可以在这里找到更多信息http://www.developer.com/db/article.php/10920_3426051_2

【讨论】:

  • 我有点发现这个问题正在挖掘重复的问题,我正在实施它,因为我们说话 - 我回到 stackoverflow 发布它并且你打败了我 - 所以我不妨标记你的答案正确.谢谢:)
【解决方案3】:

上面的答案在 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);
            }
        }
    }
}

不必修改最大上传大小。授予最终版本实际上根据 web.config 中的值设置最大上传大小的静态值,并重定向到自定义错误页面而不是该主页,但你明白了。

【讨论】:

    猜你喜欢
    • 2012-06-06
    • 2020-03-23
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多