ASP.NET - 异步回发后处理重定向

发布于 2024-11-17 17:01:15 字数 319 浏览 2 评论 0原文

我有一个使用更新面板的 ASP.NET Web 应用程序。 Web 应用程序集成在 SiteMinder SSO 环境中。

当 Siteminder 认为需要重新验证用户身份时,就会出现此问题。 当用户执行导致异步回发的操作时,Siteminder 会捕获此请求并将重定向响应发送回其登录页面。

我的 ASP.NET 页面没有预料到这一点,并抛出 PageRequestManagerParserErrorException。

我的猜测是,我必须在客户端代码中捕获此重定向响应(使用 PageRequestManager 事件?)并正确处理重定向。

但如何呢?

I have an ASP.NET web application that uses Update Panels.
The web application is integrated in a SiteMinder SSO environment.

The problem occurs when Siteminder thinks it is time to re-authenticate the user.
When the user performs an action that results in an async postback, Siteminder catches this request and sends back a redirect response to its login page.

My ASP.NET page does not expect this and throws an PageRequestManagerParserErrorException.

My guess is that I have to catch this redirect response in client code (using a PageRequestManager event?) and handle the redirect correctly.

But how?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

要走干脆点 2024-11-24 17:01:15

我有同样的问题。我在这里找到了一个解决方案: http://forums.asp.net/t/1470176.aspx /1

我最终在每个页面上得到了以下 javascript:

function pageLoad() {
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
}

function EndRequestHandler(sender, args) {
    if (args.get_error() != undefined) {
        if (args.get_response().get_responseData().indexOf("<HTML><HEAD><TITLE>") == 0) {
            args.set_errorHandled(true);
            __doPostBack("", "");
        }
        else {
            // not my error so let the default behavior happen
        }
    }
}

它会完全阻止页面出现问题,但一旦客户端上的 SSO 超时,它会执行整个页面刷新而不是异步回发。

I have the same problem. I found one solution here: http://forums.asp.net/t/1470176.aspx/1

I ended up with the following javascript on each page:

function pageLoad() {
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
}

function EndRequestHandler(sender, args) {
    if (args.get_error() != undefined) {
        if (args.get_response().get_responseData().indexOf("<HTML><HEAD><TITLE>") == 0) {
            args.set_errorHandled(true);
            __doPostBack("", "");
        }
        else {
            // not my error so let the default behavior happen
        }
    }
}

It stops the page from beaking completely but it does do a full page refresh instead of an async postback once SSO has timed out on the client.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文