ASP.NET Неверный символ в строке Base-64 - PullRequest
4 голосов
/ 27 января 2011

Я недавно внедрил ELMAH на своем сайте и заметил, что мы часто получаем ошибку «Недопустимый символ в строке Base-64». Я никогда не запускал это сам, и никто из наших пользователей не жаловался на это, поэтому я не знаю, что происходит. Из того небольшого, что я смог найти, кажется, что состояние может быть слишком большим или искаженным или что-то в этом роде. Кто-нибудь знает, что вызывает это и как это предотвратить? Вот то, что я считаю соответствующими строками в YSOD.

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

Могу ли я что-нибудь сделать с этими ошибками или я должен просто отфильтровать их в ELMAH?

Ответы [ 2 ]

4 голосов
/ 14 февраля 2012

По моему опыту, эта ошибка может быть вызвана тем, что пользователь дважды щелкает по кнопке, которая запускает обратную передачу. Второй запрос обратной передачи отменяет первый. Состояние первого запроса отправлено только частично, поэтому оно недопустимо, но ошибка не может быть отправлена ​​в браузер, потому что он отключился, что вызывает ошибку верхнего уровня. Это может быть более серьезной проблемой, если пользователь делает что-то дважды, вызывает проблемы. В противном случае эти ошибки могут быть просто отфильтрованы. Вот хороший пример фильтрации подобных ошибок в 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-кнопку , она будет исключена из переменных формы, поэтому событие Click на стороне сервера не сработает. Изменение на исправляет это. В веб-формах это будет .

Вышеописанное работает со страницами AJAX WebForms, но здесь также есть немного 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);
    });
});
2 голосов
/ 27 января 2011

Это может быть, как все настроено.Взгляните на это:

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

ОБНОВЛЕНИЕ

Попробуйте определить, где это происходит.Возможных причин может быть несколько:

«Недопустимый символ в строке Base-64» с использованием ASP.NET и C #

asp.net Недопустимый символ вСтрока Base-64

В конце концов, если, как вы говорите, это не вызывает никаких проблем в работе, вы можете отфильтровать эти ошибки.Попробуйте установить для EnableViewStateMac значение false?

...