gpt4 book ai didi

c# - 从 ServiceReference 调用的响应中获取 header 值 (Set-Cookie)

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:46 26 4
gpt4 key购买 nike

我正在从事一个项目,我必须在 SOAP 网络服务表单中调用 API 并获得响应。当响应返回时,我必须从 header 中提取一个 Set-Cookie 值,并将 header Cookie 值与后续 API 请求一起传递。最初,我一直在使用 XmlWriter 从头开始​​构建我的 SOAP 文档。我的一个队友让我开始使用服务引用,这意味着我不必编写任何自定义 XML(大赢)。

我的主要问题是我必须获取 header 值,否则 API 调用将无法工作。有没有一种方法可以获取响应 header ,同时仍然能够使用服务引用及其附带的所有优点?

最佳答案

我花了一天的大部分时间试图解决这个问题......我最终编写了一个 WCF 服务来模拟设置 cookie 并将其作为 OperationContract 的一部分发送出去(尽管这是不好的做法,但我不会这样做'实际上并没有这样做,因为 WCF 不仅仅是 HTTP)。

最初我认为 Message Inspectors 可以解决这个问题,但经过几个小时的代码迭代后,我最终编写了一个自定义 WebClient 类来“模拟”服务引用,这让我可以在 CookieContainer 中看到 Headers。

所以在尝试了所有这些不同的想法并编写了一页又一页的代码之后,按照大多数时候我尝试了一些我以前没有做过的事情,我在谷歌上偶然发现了一篇文章(同时搜索与原始问题完全不同的东西):

http://megakemp.com/2009/02/06/managing-shared-cookies-in-wcf/

阅读部分(临时 cookie 管理),这是我的实现(使用我创建的测试服务来模拟您的问题)。您可能会在我从 header 字符串重新组装 cookie 的部分进行更多的完整性/错误检查...

        List<string> strings = null;

// Using Custom Bindings to allow Fiddler to see the HTTP interchange.
BasicHttpBinding binding = new BasicHttpBinding();
binding.AllowCookies = true;
binding.BypassProxyOnLocal = false;
binding.ProxyAddress = new Uri("http://127.0.0.1:8888");
binding.UseDefaultWebProxy = false;

EndpointAddress url = new EndpointAddress("http://192.168.20.4:42312/Classes/TestService.svc");

using (TestServiceClient client = new TestServiceClient(binding,url))
{
using (new OperationContextScope(client.InnerChannel))
{
strings = new List<string>(client.WSResult());
HttpResponseMessageProperty response = (HttpResponseMessageProperty)OperationContext.Current.IncomingMessageProperties[HttpResponseMessageProperty.Name];

CookieCollection cookies = new CookieCollection();
foreach (string str in response.Headers["Set-Cookie"].ToString().Split(";".ToCharArray()))
{
Cookie cookie = new Cookie(str.Split("=".ToCharArray())[0].Trim(), str.Split("=".ToCharArray())[1].Trim());
cookies.Add(cookie);
}
}

}

关于c# - 从 ServiceReference 调用的响应中获取 header 值 (Set-Cookie),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29303700/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com