将授权标头添加到 Web 引用



我正在尝试向客户端的Web服务发出请求(我不知道客户端的底层平台)。我在Visual Studio 2010中使用了"添加Web引用"的客户端WSDL,并生成了我的代理类(称为"ContactService")。

我现在需要将如下所示的授权标头添加到我的服务请求中。

Header=Authorization & Value=Basic 12345678901234567890

(上面的"123456..."值只是占位符)

ContactService service = new ContactService();
//not sure if this is the right way - it's not working
WebClient client = new WebClient();
client.Headers.Add("Authorization", "Basic 12345678901234567890");            
service.Credentials = client.Credentials;
int contactKey = null;
try
{                
   contactKey = service.CreateContact("ABC", emailAddress, firstName, lastName, null);
}

授权标头添加到服务请求的正确方法是什么?

谢谢!

上面的响应是正确的,但它必须在不同的位置。

我将其添加到 .Net 生成的 Web 引用代理类中:

protected override WebRequest GetWebRequest(Uri uri)
    {
        HttpWebRequest req = (HttpWebRequest)base.GetWebRequest(uri);            
        req.Headers.Add(HttpRequestHeader.Authorization,
                "Basic " + "12345678901234567890");
        return req;
    }

Web 引用代理类扩展了 System.Web.Services.Protocols.SoapHttpClientProtocol。此类包含对 System.Net.WebRequest.GetWebRequest(Uri uri) 的调用。WebRequest 允许我们在调用代理类的方法时在请求上设置特定的标头。

感谢您的帮助!

需要进行一些更改。

首先,有一个方便的常数HttpRequestHeader.Authorization

其次,他们是否期望标头是 Base64 编码的 - 这通常是基本身份验证所必需的。

WebClient.Headers.Add(HttpRequestHeader.Authorization, 
    "Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("12345678901234567890")));

我正在为现在有这个问题的人写这篇文章。如前面的答案所述,继承层次结构上升到类WebClientProtocol,此类具有ICredentials属性,只需通过NetworkCredential实例设置此属性,如下所示:

YourServis.Credentials = new NetworkCredential("UserName", "Password", "Domain");

我认为这是最简单的方法,无需更改引用.cs或添加标题。

相当古老的复兴后,但如果您使用 vs2022 使用旧服务,添加解决方案代码的最佳方法是创建一个新类并从代理类继承,因为您无法直接编辑代理类。

相关内容

  • 没有找到相关文章

最新更新