Как обработать исключение из-за истекшего билета аутентификации, используя UpdatePanel? - PullRequest
1 голос
/ 29 сентября 2011

Я почти уверен, что причина ошибки в том, что срок действия билета для проверки подлинности форм истек.Когда пользователи не выполнили ни одного запроса страницы за последние 20 минут и щелкают по любой из ссылок GridView (для редактирования, удаления, сортировки ...), возникает исключение: Sys.WebForms.PageRequestManagerServerErrorException 12031.

Исключение составляет только , когда GridView находится внутри UpdatePanel .

Если я удаляю UpdatePanel, приложение перенаправляет пользователя на вход в систему.страница, которая должна соответствовать ожидаемому поведению.

Как я могу перехватить это исключение, чтобы перенаправить пользователя на страницу входа?

Примечание: уже естьвопрос об этой же ошибке: Sys.WebForms.PageRequestManagerServerErrorException 12031 .Однако причина в другом, поскольку связана с размером объектов, хранящихся в ViewState, что не в моем случае.

Ответы [ 4 ]

1 голос
/ 03 октября 2011

Добавьте Global.asax (если у вас его нет).

protected void Application_Error(object sender, EventArgs e)
{
    // Get the last exception
    Exception ex = Server.GetLastError();
...

и, если исключение - PageRequestManagerServerErrorException

Server.ClearError();
Response.Redirect("~/login");
0 голосов
/ 06 октября 2011

Я не знаю, почему это происходит, но когда это происходит, я просто отмечаю ошибку как обработанную, и ничего не взрывается. Просто добавьте следующий JavaScript, и ваши проблемы исчезнут.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <script type="text/javascript" >
        (function() {
            var prm = Sys.WebForms.PageRequestManager.getInstance();

            if (prm)
            {
                prm.add_endRequest(
                function (sender, args) {            
                    // Any code you want here

                    if(args.get_error() && args.get_error().name === 'Sys.WebForms.PageRequestManagerServerErrorException')
                    {
                        args.set_errorHandled(args._error.httpStatusCode == 0);
                    }
                });
            }
        })();
        </script>
    </form>
</body>
</html>
0 голосов
/ 05 октября 2011

Если вы получаете ответ в браузер с исключением, вы можете его перехватить, связав событие endRequest с ScriptManager и проверив наличие ошибки и правильный httpStatusCode.Просто добавьте javascript ниже тега asp: ScriptManager, чтобы браузер распознал пространство имен.

Если вам нужно расширить это, ознакомьтесь с документацией MSDN

<script type="text/javascript" language="javascript">
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);

    function EndRequestHandler(sender, args)
    {
        // Verify the httpStatusCode you are receiving
        if (args.get_error() != undefined && args.get_error().httpStatusCode == '302')
        {
            args.set_errorHandled(true);
            alert('Authentication expired, redirecting to login page');
            location.href='login.aspx'; // Whatever your login page is
        }
    }
</script>
0 голосов
/ 05 октября 2011

На стороне сервера вы можете обработать это исключение из события AsyncPostBackError вашей UpdatePanel.Это позволит вам, например, зарегистрировать ошибку.

Для перенаправления вам необходимо обработать исключение на стороне клиента, чтобы настроить обработку ошибок (и перенаправить на вход в систему в вашем случае).

Оба документально задокументированы здесь: http://msdn.microsoft.com/en-us/library/bb398934.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...