我最近在我的网站上实现了Elmah,并且注意到我们经常在基本64字符串中获得“无效字符”错误。我从来没有自己触发过它,我们的用户都没有抱怨过,所以我不知道发生了什么。从我的小东西来看,ViewState似乎可能变得太大或变得腐败或其他东西。有人知道是什么原因导致了这一点,以及如何预防它?我认为这是YSOD中的相关线。

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

对于这些错误,我能做什么,还是应该在Elmah中过滤它们?

有帮助吗?

解决方案

可能是如何配置事物的方式。看看这个:

http://groups.google.com/group/elmah/browse_thread/thread/thread/ec9c4bdddaa1a9e/9108b48b48d3def87db?lnk=gst&q=viewstate+elmah#9108b48b48d3def877db

更新

尝试确定它发生的位置。可能有几个潜在原因:

使用ASP.NET和C#的“基本64字符串中的无效字符”字符串

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

归根结底,如您所说,它不会在生产中引起任何问题,那么您可以过滤这些错误。尝试将启用ViewStateMac设置为false?

其他提示

根据我的经验,通过用户双击触发寄回的按钮上的用户双击往往会导致此错误。第二个回发请求取消第一个。第一个请求的ViewState仅部分提交,因此它是无效的,但是由于已断开连接,该错误无法发送到浏览器,这会触发顶级错误。如果用户两次导致麻烦,这可能是一个更大的问题。否则,这些错误可以简单地过滤。这是滤除Elmah类似错误的一个很好的例子:https://stackoverflow.com/a/2549509/267448

如果您使用的是ASP.NET WebForms,请使用一些代码来禁用发回期间的触发控件:http://disturbedbuddha.wordpress.com/2007/12/10/disabling-a-trigger-control-durol-during-during-asynchronous-postback/

当心,如果您禁用HTMLu003Cinput type="submit">按钮,它被排除在您的form变量之外,因此您的服务器端点击事件不会发射。将其更改为u003Cinput type="button">修复了这一点。在WebForms中,那将是u003Casp: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);
    });
});
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top