向Web引用添加授权标头
我正在尝试向客户端的Web服务发出请求(我不知道客户端的底层平台)。 我使用“添加Web引用”在Visual Studio 2010中使用了客户端的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 Reference代理类扩展了System.Web.Services.Protocols.SoapHttpClientProtocol。 该类包含对System.Net.WebRequest.GetWebRequest(Uri uri)的调用。 WebRequest允许我们在调用代理类的方法时在请求上设置特定标头。
谢谢你的帮助!
有几个变化要做。
首先,有一个方便的常量HttpRequestHeader.Authorization
。
其次,他们是否期望标头是Base64编码 – 这通常是基本身份validation所必需的。
WebClient.Headers.Add(HttpRequestHeader.Authorization, "Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("12345678901234567890")));
我现在正在写这个有这个问题的人。 如前面的答案所述,inheritance层次结构上升到WebClientProtocol
类,此类具有ICredentials
属性,只需通过NetworkCredential
实例设置此属性,如下所示:
YourServis.Credentials = new NetworkCredential("UserName", "Password", "Domain");
我认为这是最简单的方法,无需更改Reference.cs或添加标题。
上述就是C#学习教程:向Web引用添加授权标头分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/989292.html