2017-04-03 329 views
0

所以我本來的web請求驗證碼:使用創建HttpWebResponse接口返回401未經授權錯誤

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 
request.UseDefaultCredentials = true; 
WebResponse response = request.GetResponse(); 

,我改變了這個以添加單元測試:

IHttpWebRequest request = IHttpWebRequestFactory.Create(uri); 
request.UseDefaultCredentials = true; 
IWebResponse response = request.GetResponse(); 

IHttpWebRequest:

public interface IHttpWebRequest 
{ 
    bool UseDefaultCredentials { get; set; } 
    IWebResponse GetResponse(); 
} 

MyHttpWebRequest:

public class MyHttpWebRequest : IHttpWebRequest 
{ 
    private readonly HttpWebRequest httpWebRequest; 
    private bool useDefaultCredentials; 

    public MyHttpWebRequest(HttpWebRequest httpWebRequest) 
    { 
     this.httpWebRequest = httpWebRequest; 
    } 

    public bool UseDefaultCredentials 
    { 
     get { return useDefaultCredentials; } 
     set { useDefaultCredentials = value; } 
    } 

    public IWebResponse GetResponse() 
    { 
     return new MyWebResponse((HttpWebResponse)httpWebRequest.GetResponse()); 
    } 
} 

IHttpWebRequestFactory:

public interface IHttpWebRequestFactory 
{ 
    IHttpWebRequest Create(string Uri); 
} 

HttpWebRequestFactory:

public class HttpWebRequestFactory : IHttpWebRequestFactory 
{ 
    public IHttpWebRequest Create(string Uri) 
    { 
     return new MyHttpWebRequest((HttpWebRequest)WebRequest.Create(Uri)); 
    } 
} 

IWebResponse:

public interface IWebResponse 
{ 
    Stream GetResponseStream(); 
} 

MyWebResponse:

public class MyWebResponse : IWebResponse 
{ 
    private WebResponse webResponse; 

    public MyWebResponse(HttpWebResponse webResponse) 
    { 
     this.webResponse = webResponse; 
    } 

    public Stream GetResponseStream() 
    { 
     return webResponse.GetResponseStream(); 
    } 
} 

但是,該網站現在返回一個HTTP錯誤401未經授權。儘管使用Fiddler。我也嘗試設置request.Credentials = CredentialCache.DefaultNetworkCredentials,request.PreAuthenticate = true等,但無濟於事。 。:(

我也試圖提供給我的證書,但未經授權的錯誤仍然出現用戶名和密碼,這是因爲上述工程的原代碼奇:(

回答

0

您沒有使用正確useDefaultCredentials,試試這個:

MyHttpWebRequest:!

public class MyHttpWebRequest : IHttpWebRequest 
{ 
    private readonly HttpWebRequest httpWebRequest; 

    public MyHttpWebRequest(HttpWebRequest httpWebRequest) 
    { 
     this.httpWebRequest = httpWebRequest; 
    } 

    public bool UseDefaultCredentials 
    { 
     get { return this.httpWebRequest.UseDefaultCredentials; } 
     set { this.httpWebRequest.UseDefaultCredentials = value; } 
    } 

    public IWebResponse GetResponse() 
    { 
     return new MyWebResponse((HttpWebResponse)httpWebRequest.GetResponse()); 
    } 
} 
+0

哇很多,非常感謝這個現在我意識到我的獲取/設置界面,而不是HttpWebRequest的財產的錯誤。 – okonomiyaki

相關問題