ASP.NET中Base-64字符串存在无效字符

5

我最近在我的网站上实现了ELMAH,但我发现我们经常收到“Base-64字符串中有无效字符”的错误。我自己从未触发过它,也没有任何用户抱怨过,所以我不知道发生了什么。从我能找到的少量信息来看,似乎视图状态可能会变得太大或损坏了什么东西。有人知道是什么原因导致这种情况并如何预防吗?以下是我认为与YSOD相关的重要行。

[FormatException: Invalid character in a Base-64 string.]
[ViewStateException: Invalid viewstate. 
[HttpException (0x80004005): The client disconnected.]

这些错误我能做些什么,还是只能在ELMAH中过滤它们?

2个回答

4
根据我的经验,这种错误通常是由用户双击触发 postback 的按钮引起的。第二个 postback 请求会取消第一个请求。第一个请求的视图状态只被部分提交,因此无效,但错误无法发送到浏览器,因为已经断开连接,从而触发顶级错误。如果用户重复执行某些操作会导致问题,那么这可能是一个更大的问题。否则,这些错误可以简单地进行过滤。以下是在 ELMAH 中过滤类似错误的良好示例: https://dev59.com/vUrSa4cB1Zd3GeqPWnqW#2549509 如果您正在使用 ASP.NET WebForms,请使用以下代码在 postback 期间禁用触发控件: http://disturbedbuddha.wordpress.com/2007/12/10/disabling-a-trigger-control-during-asynchronous-postback/ 请注意,如果禁用 HTML 的 <input type="submit"> 按钮,则该按钮将从表单变量中排除,因此您的服务器端 Click 事件不会触发。将其更改为 <input type="button"> 即可解决问题。在 WebForms 中,应使用 <asp:Button UseSubmitBehavior="False" />。
以上内容适用于 WebForms AJAX 页面,但是这里还有一些我为其他页面想出的 jQuery 代码。
$(function () {
    $("a[href^='javascript']").click(function (event) {
        if (event.target.disabled)
            return false;
        event.target.disabled = true;
        setTimeout(function () {event.target.disabled = false;}, 250);
    });
});

另请参阅Encosia Postback Ritalin:http://encosia.com/downloads/postback-ritalin/ https://github.com/Encosia/PostBackRitalin - user423430
谢谢!它也可以作为NuGet包使用:http://nuget.org/packages/PostBackRitalin - Brian Rogers

2
可能是配置问题。看一下这个链接:http://groups.google.com/group/elmah/browse_thread/thread/ec9c4bdddaa1a9e/9108b48d3def87db?lnk=gst&q=viewstate+elmah#9108b48d3def87db 更新:尝试找出错误发生的位置。可能有几个潜在原因:"Invalid Character in Base-64 String" using ASP.NET and C#asp.net Invalid character in a Base-64 string。最终,如果像你说的那样,在生产环境中没有引起任何问题,那么你可以过滤掉这些错误。尝试将EnableViewStateMac设置为false?

嗯,那这个错误我不能修复吗?也不需要担心吗? - William

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接