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

时间:2011-01-26 21:26:47

标签: asp.net elmah invalid-characters

我最近在我的网站上实现了ELMAH,我注意到我们经常收到“Base-64字符串中的无效字符”错误。我自己从来没有触发它,没有一个用户抱怨它,所以我不知道发生了什么。从我能够找到它的一点点来看,似乎视图状态可能变得太大或变得腐败或者其他东西。有谁知道是什么原因造成的,以及如何预防?以下是我认为YSOD中的相关内容。

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

我可以对这些错误做些什么,还是应该在ELMAH中过滤它们?

2 个答案:

答案 0 :(得分:4)

根据我的经验,这个错误往往是由用户双击触发回发的按钮引起的。第二个回发请求取消第一个回发请求。第一个请求的视图状态仅部分提交,因此无效,但错误无法发送到浏览器,因为它已断开连接,从而触发顶级错误。如果用户做两次事情导致麻烦,这可能是一个更大的问题。否则,可以简单地过滤这些错误。这是在ELMAH中过滤掉类似错误的一个很好的例子: https://stackoverflow.com/a/2549509/267448

如果您使用的是ASP.NET WebForms,这里有一些代码可以在回发期间禁用触发控件: 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”/&gt ;.

以上内容适用于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);
    });
});

答案 1 :(得分: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?