簡體   English   中英

在C#中對其進行包裝后,在HttpClient中設置憑據的方法

[英]Way to set credentials in HttpClient after made a wrapper for it in C#

我創建了一個名為INetClient的接口,該接口支持兩個客戶端: HttpClientWebClient (我希望我的應用程序可以進行單元測試)

界面如下:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM