向Web引用添加授权标头

Mik*_*ike 13 .net c# web-services web-reference request-headers

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

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

Header=Authorization & Value=Basic 12345678901234567890
Run Code Online (Sandbox Code Playgroud)

(上面的"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);
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Mik*_*ike 16

上面的回应是在正确的轨道上,但它只是在不同的位置.

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

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

        return req;
    }
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助!


Fen*_*ton 11

有几个变化要做.

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

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

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