[英]Way to set credentials in HttpClient after made a wrapper for it in C#
我創建了一個名為INetClient
的接口,該接口支持兩個客戶端: HttpClient
和WebClient
(我希望我的應用程序可以進行單元測試)
界面如下:
public interface INetClient
{
...
void SetCredentials(ICredentials credentials);
void SetHeaders(Dictionary<HttpRequestHeader, string> headers);
void SetHeaders(Dictionary<string, string> headers);
...
}
對於它們每個人,我創建了一個實現該接口的包裝器類。
對於Web客戶端,我確實喜歡:
public sealed class WebClientEx : WebClient, INetClient
{
public WebClientEx()
{
CookieContainer = new CookieContainer();
Encoding = Encoding.UTF8;
}
public void SetCredentials(ICredentials credentials)
{
Credentials = credentials;
}
}
對於http客戶端:
public sealed class HttpClientEx : INetClient, IDisposable
{
private HttpClient _client;
public HttpClientEx()
{
var handler = new HttpClientHandler();
_client = new HttpClient(handler);
}
public void SetCredentials(ICredentials credentials)
{
// here, how I can set credentials ?
}
}
稍后,我將使用像RegisterType<INetClient, WebClientEx>
這樣的依賴項注入RegisterType<INetClient, WebClientEx>
或者我可以輕松地更改為RegisterType<INetClient, HttpClientEx>
如何在不為其創建新實例的情況下為http客戶端設置憑據?
如果您的Web服務使用HTTP基本身份驗證,則可以使用HttpClient.DefaultRequestHeaders
屬性設置標頭
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.