应用程序能够记录中的错误OnError,但我们不能做任何重新定向,或者所显示的东西meaningfull要用户。任何想法?我知道,我们可以设置maxRequestLength在网。config,但无论如何,用户可以超过这个限制并且一些正常的错误需要显示。

有帮助吗?

解决方案

正如您所说,您可以在web.config中设置maxRequestLength(覆盖您的machine.config的默认4MB),如果超出此限制,您通常会收到HTTP 401.1错误。

为了在应用程序级别处理通用HTTP错误,您可以在system.web部分的web.config中设置CustomError部分:

<system.web>
   <customErrors mode=On defaultRedirect=yourCustomErrorPage.aspx />
</system.web>

每次显示错误时,用户都将被重定向到您的自定义错误页面。

如果您想为每个错误设置专门的页面,您可以执行以下操作:

<system.web>    
   <customErrors mode="On" defaultRedirect="yourCustomErrorPage.aspx">
     <error statusCode="404" redirect="PageNotFound.aspx" />
   </customErrors>
</system.web>

等等。

或者,您可以从IIS编辑虚拟目录属性的CustomErrors选项卡,以指向您选择的错误处理页面。

以上似乎不适用于401.x错误 - 这篇代码项目文章解释了一个似乎非常类似问题的解决方法:重定向到自定义401页面

其他提示

不幸的是,您可能需要IIS7并使用自定义处理程序捕获它,因为IIS6永远不会到达可以查看文件大小的阶段。只有在完成上传或出错时才能知道大小。

这是ASP.NET中的一个已知问题。另一个(蹩脚的)替代方案是在请求中更早地处理这个问题,并且可能使用基于闪存的上传器。 John链接到以下几个链接

更新:Jon Galloway似乎更深入地研究了这个问题,看起来像RIA-uploader是唯一明智的选择,因为IIS似乎总是要吞下文件然后告诉你它很大。

谢尔盖,

根据JohnIdol的回答,您需要为 413 状态代码设置自定义错误页面。 e.g:

    <customErrors mode="On" defaultRedirect="~/Errors/Error.aspx">
                    <error statusCode="413" redirect="~/Errors/UploadError.aspx"/>
    </customErrors>

我知道因为我必须在客户端项目中解决同样的问题,这是对我有用的解决方案。不幸的是,这是我发现的唯一解决方案......在代码中无法捕捉到这个特殊问题;例如,以snomag建议的方式检查已发布文件的长度,或者在global.asax中捕获错误。和你一样,在我提出一个有效的解决方案之前,我也尝试过其他方法。 (实际上,当我处理我的问题时,我最终在网上找到了这个。)

希望有所帮助。

您应该能够捕获Global.asax - OnError()处理程序中的错误。 但遗憾的是,您的初始请求将完成,您将无法向用户呈现相同的上载页面并显示一些错误通知。

你最多可以做的是在OnError()处理程序和该页面上显示带有简单重定向子句的友好错误页面,以便有一些反向链接或类似功能将用户返回到他触发错误的页面首先。

更新:

我最近必须对文件上传进行精确检查,我想到的是完全符合的 SWFUpload 库我的要求,还有很多额外的功能。我将它与Steve Sanderson提供的jquery包装一起使用。有关详细信息,请访问此处

关键是,flash能够在客户端检测文件大小,并在满足此情况下做出正确反应。我认为这正是你所需要的。

此外,如果您希望在客户端未安装闪存的情况下优雅地降级到本机上传按钮0,则可以实施闪存检测检查。

最好的方式来处理大会上传是使用一个解决方案,实现一个HttpModule,这将打破该文件达成的区块。任何预卷解决方案应该允许限制文件的大小。很多其他人已经张贴链接到那些在这一页面,所以我不会打扰。但是,如果你不想打扰你 可以 处理这个在你的程序是全球性的。asax Application_Error事件。如果应用程序。净4.0,把这块代码中有:

    if (ex.InnerException != null && ex.InnerException.GetType() == typeof(HttpException) && ((HttpException)ex.InnerException).WebEventCode == System.Web.Management.WebEventCodes.RuntimeErrorPostTooLarge)
    {
        //Handle and redirect here, you can use Server.ClearError() and Response.Redirect("FileTooBig.aspx") or whatever you choose
    }

资料来源: http://justinyue.wordpress.com/2010/10/29/handle-the-maximum-request-length-exceeded-error-for-asyncfileupload-control/

如果你在一个较早的框架内,试试这里的代码(这是在VB,但它很容易翻译): http://www.webdeveloper.com/forum/showthread.php?t=52132

您可以检查已发布文件的长度(FileUpload.PostedFile.ContentLength),看它是否低于限制,并在必要时显示友好的错误消息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top