【问题标题】:Maintaining session state when using XElement.Load使用 XElement.Load 时保持会话状态
【发布时间】:2011-09-05 09:44:39
【问题描述】:

我的 ASP.NET Web 应用程序使用内部 RSS 提要,该提要使用当前登录用户的身份来自定义其内容。 RSS 提要由我的应用程序中的标准 .ashx 处理程序生成。

当我使用XElement.Load(rssFeedUri) 调用 RSS 提要时,不会维护会话状态(可能是因为会话 ID cookie 没有随请求一起发送)。

当直接从登录用户的浏览器地址栏调用 RSS 提要时,它会按预期工作。我已经确保我的处理程序实现了IRequiresSessionState,这样如果将会话 ID 传递给服务,我就可以访问会话数据。

使用 Visual Studio 调试器,我确定当通过 XElement.Load 访问我的提要时正在创建一个新会话。

如何加载我的 RSS 提要并确保会话状态可供它使用?

【问题讨论】:

    标签: c# asp.net session


    【解决方案1】:

    您可以执行以下步骤:

    1. 使用 WebClient 类以字符串形式加载 RSS URL 内容。使用此 WebClient 类时,将 Cookies 请求标头值设置为与具有会话 ID 等的当前 Web 请求 Cookie 标头相同。
    2. 从上面得到的字符串创建字符串阅读器
    3. 使用 XElement.Load(str_reader)

    希望能解决你的问题

    【讨论】:

    • 这听起来是个不错的计划。但是,在实践中,一旦我调用了 webClient.Headers.Add("Cookie", existingCookieValue) ,那么执行请求的调用似乎就会挂起。在不添加 cookie 标头的情况下,请求会快速返回,但会出现 403 Forbidden(如预期的那样)。有什么想法吗?
    • 嗯不知道为什么会这样...另一种选择是在普通类方法中重构处理程序逻辑并调用返回 RSS 提要的方法。从 Handler 的 ProcessRequest 调用相同的方法。无需通过 URL 路径
    • 我猜我的 webClient 调用挂了,因为有一个并发请求的限制,它使用每个会话 ID 的会话状态。 stackoverflow.com/a/2327051/431891
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2012-02-06
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 2020-04-09
    相关资源
    最近更新 更多