【问题标题】:How can I get the request of a WebClient to use the same Session from the original request?如何获取 WebClient 的请求以使用原始请求中的相同 Session?
【发布时间】:2012-08-24 22:41:19
【问题描述】:

因此向 ASP.net MVC 控制器/操作发出请求。这有一个关联的会话。我们实例化 WebClient 对象并调用同一站点上的资源的部分操作。

然而,尽管它是同一个站点,同一个应用程序池,因为 WebClient 创建了一个新请求,它具有不同的会话。 (我知道你的想法,如果它在同一个应用程序池、同一个站点上,为什么需要 WebClient)。我把这些细节都留了下来,以免弄脏水,但 WebClient 是有原因的。

据我了解,如果可以为 WebClient 分配原始 Request.Cookies 集合中的 cookie,则 ASP.net 将能够根据现有 cookie 查找现有 Session。

所以我猜有两个问题:

  1. 这是正确的吗?如果我要(以某种方式)将 cookie 分配给 WebClient,那么 WebClient 创建的请求最终会获取原始请求的 Session。
  2. 如何将当前的 Request.Cookies 分配给 WebClient?

更新

我已经查看并尝试了Using CookieContainer with WebClient classSending cookies using HttpCookieCollection and CookieContainer,但我还没有找到可行的解决方案。

我们有一个 Umbraco 和 asp.net MVC 的捆绑解决方案,我们正在使用 webclient 向 Umbraco 发出页面请求。在我的研究中,我还发现可能有其他事实可能导致 cookie 无法像我上面描述的那样工作。所以我想首先要找出关于cookies的全部内容是否允许获取原始会话?或者是否有更好的方法来处理我们正在做的事情?

【问题讨论】:

    标签: asp.net-mvc-3 httpwebrequest umbraco httpcookie cookiecontainer


    【解决方案1】:

    也许您可以尝试此处显示的实现:

    Sending cookies using HttpCookieCollection and CookieContainer

    它将传入的 cookie 复制到传出的外部请求。 但是,该实现用于使用HttpWebRequest。如果您确实需要使用 WebClient ,那么这可能很有用: Using CookieContainer with WebClient class

    【讨论】:

    • 我看过这两个帖子。我正在更新我的问题,以添加更多关于我正在尝试做的事情的背景信息。
    • 我不熟悉 Umbraco,但如果您转发足以识别会话的 cookie,则适用于 ASP.NET 的 AFAIK。也许 Umbraco 正在实施额外的检查,例如传入的 IP 或类似的东西,以避免会话劫持。在您的测试期间,通常发送给 Umbraco 的所有 cookie 在复制时也会出现在哪里?
    • 通过 js 和 ajax 获取内容客户端是否不是有效的替代方案,或者您需要更改或处理结果服务器端?您将完成类似的结果,但避免手动处理 cookie 和双重请求以获取内容。
    • 幸运的是,我找到了一种方法,通过使用 WebRequest 和 WebClient 对象来获取具有相同 SessionID 的会话,但似乎 Umbraco CMS 导致它仍然是一个新会话(IsSessionNew =真)。标记此答案,因为它会让人接近。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 2019-11-28
    • 2021-08-18
    • 2022-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多