使用HttpWebRequest(.NET)处理身份验证

时间:2009-07-02 18:42:03

标签: .net web-services httpwebrequest

我正在从VB应用程序访问REST Web服务。我创建一个HttpWebResponse对象并在其上调用GetRequestStream就好了,但是当我调用GetResponse时,我得到了一个401异常。

这是我的代码(修改后发布):

Dim webRequest = DirectCast(WebRequest.Create(endpoint), HttpWebRequest)
webRequest.Method = "POST"
webRequest.ContentLength = contentLength
webRequest.ContentType = "application/x-www-form-urlencoded"

request.Credentials = New NetworkCredential(Username, Password)

' Works fine
Using stream As Stream = webRequest.GetRequestStream()
    stream.Write(data, 0, data.Length)
End Using

' Barfs
Dim response As HttpWebResponse = DirectCast(webRequest.GetResponse(), HttpWebResponse)

一旦调用“webRequest.GetResponse()”,我就会收到401异常。响应中有一个“WWW-Authenticate”标头,带有适当的域。我尝试设置“webRequest.PreAuthenticate = True”,以及使用“webRequest.Headers.Add(HttpRequestHeader.Authorization,_authheader)”手动设置标题

我似乎无法使用Fiddler / Wireshark等监控这些请求,因为这是SSL流量,我确信有一种方法可以监控它,我还没有找到它。

提前致谢,

- 康纳

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:3)

尝试手动添加AUTHORIZATION标头,例如......

string autorization = userName + ":" + password;
byte[] binaryAuthorization = System.Text.Encoding.UTF8.GetBytes(autorization);
autorization = Convert.ToBase64String(binaryAuthorization);
autorization = "Basic " + autorization;
webRequest.Add("AUTHORIZATION", autorization);

过去,设置Credentials属性失败了。

答案 2 :(得分:1)

谢谢大家的帮助!问题是我被重定向了!我认为我需要做的就是更改地址标题以反映在成功完成帖子后我将被重定向到的网址。

答案 3 :(得分:0)

这肯定不是你的问题,但我过去曾经通过设置

解决了身份验证问题
request.ProtocolVersion = HttpVersion.Version10