base-64字符串中的ASP.NET无效字符
-
24-10-2019 - |
题
我最近在我的网站上实现了Elmah,并且注意到我们经常在基本64字符串中获得“无效字符”错误。我从来没有自己触发过它,我们的用户都没有抱怨过,所以我不知道发生了什么。从我的小东西来看,ViewState似乎可能变得太大或变得腐败或其他东西。有人知道是什么原因导致了这一点,以及如何预防它?我认为这是YSOD中的相关线。
[FormatException: Invalid character in a Base-64 string.]
[ViewStateException: Invalid viewstate.
[HttpException (0x80004005): The client disconnected.]
对于这些错误,我能做什么,还是应该在Elmah中过滤它们?
解决方案
可能是如何配置事物的方式。看看这个:
更新
尝试确定它发生的位置。可能有几个潜在原因:
使用ASP.NET和C#的“基本64字符串中的无效字符”字符串
归根结底,如您所说,它不会在生产中引起任何问题,那么您可以过滤这些错误。尝试将启用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);
});
});