2009-07-02 473 views
3

我正在从VB应用程序访问REST Web服务。我创建了一个HttpWebResponse对象,并调用GetRequestStream就可以了,但是当我调用GetResponse时,我得到了一个401异常。使用HttpWebRequest处理身份验证(.NET)

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

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流量,我相信有一种方法可以监控它,但我还没有发现它。

由于提前,

--Connor

回答

1

曾在过去的认证问题已修复谢谢大家的帮助!问题是我正在重定向!我认为我需要做的就是更改地址标题,以反映我将在成功完成帖子后重定向的网址。

3

尝试增加手动添加AUTHORIATION头,像...

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

这已经在为我工作过去设置Credentials属性失败的地方。

+0

我试过这个,但它对我没有用。 – 2009-07-02 19:08:07

0

这当然是可能的,这不是你的问题,但我已经通过设置

request.ProtocolVersion = HttpVersion.Version10