簡體   English   中英

具有不同 api 客戶端的 .Net Web 應用程序

[英].Net web application with different api clients

我有一個 Blazor 項目,我需要使用幾個 REST API。 所有這些 API 都需要不同的配置。 例如:對於這些 api 之一,我必須使用 ServicePointManager.ServerCertificateValidationCallback 繞過證書。 對於另一個 api,我必須發送帶有 bodypayload 的 GET 請求(這不是語義)。 對於另一個 api,我需要 JWT ......等等。 關鍵是我有不同的 HttpClinet(s),它們需要不同的配置。

所以問題是你如何處理它? 你在 .NET 中有所有這些令人驚奇的東西,比如依賴注入、單例、瞬態、IHttpClientFactory,你可以在 startup.cs 或 ctor 或任何其他地方配置你的 api 客戶端。 那么這里的正確方法是什么?

我有一個強烈的填充,在這種情況下,策略設計模式之類的東西可能很有用

這不是一個完整的答案,但您不能在評論中添加代碼

您是在談論在服務器上配置不同的端點,還是在 Blazor 中將不同的 HttpClient 請求配置為這些端點?

我無法涵蓋您上面的所有選項,但這里有一個示例。 該代碼來自我的一個演示項目中的WeatherForecastDataServerice ,它將 JWT 令牌添加到對 WeatherForecast API 控制器的 API 調用的標頭中。

public async ValueTask<List<WeatherForecast>> GetForecastAsync()
{
    _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", myJwtToken);
    var response = await _httpClient.GetAsync($"/api/weatherforecast/GetForecastAsync");
    return response.IsSuccessStatusCode
        ? await response.Content.ReadFromJsonAsync<List<WeatherForecast>>()
        :new List<WeatherForecast>();
}

每個人最不喜歡的答案 - 這取決於。

您最終希望如何與 API 交互? 您是否想要以標准化方式交互的每個 API 的接口? 或者你想要一個大的界面? 如果是前者,請考慮使用適配器模式。 如果是后者,外觀模式,可能分層在適配器模式的頂部。 無論哪種方式,聽起來您使用的每個 API 都足夠不同,您需要相對較高的抽象級別,以便標准化您與它們的交互方式。

就引擎蓋下的事情而言,有很多方法可以處理它。 策略、委托、命令、構建器、簡單的組合和/或繼承,還有更多我沒有想到的。 這實際上取決於您的目標、API 彼此之間的不同之處、您打算添加多少 API,等等。實現相同目標的方法有很多種,而您如何實現這一目標的方式在很大程度上取決於您的具體情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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