簡體   English   中英

簡單 Odata 客戶端 - 如何在每個請求標頭中添加 oAuth 令牌?

[英]Simple Odata Client - How to add oAuth Token in each request header?

在 Microsoft oData v4 代理客戶端中,有一個選項可以將身份驗證令牌添加到每個請求中。 可以通過以下方式實現:

var container = new Default.Container(new Uri(http://localhost:9000/));

//Registering the handle to the BuildingRequest event. 
container.BuildingRequest += (sender, e) => OnBuildingRequest(sender, e, accessToken);


//Every time a OData request is build it adds an Authorization Header with the acesstoken 
private static void OnBuildingRequest(object sender, BuildingRequestEventArgs e, TokenResponse token)
{
 e.Headers.Add("Authorization", "Bearer " + token.AccessToken);
}

如何使用簡單的 odata 客戶端做同樣的事情?

顯然,我應該解釋為什么這是答案。

說明:這是為 Simple ODataClient 添加令牌的方式。

var settings = new ODataClientSettings(new Uri("http://localhost:9000/"));
settings.BeforeRequest += delegate(HttpRequestMessage message)
{
    message.Headers.Add("Authorization", "Bearer " + token.AccessToken);
};

var client = new ODataClient(settings);

一個更清晰/更簡潔的解決方案是使用 HttpClient 實例實例化 ODataClient,而不是使用委托方法在每個 Http 調用中攔截和添加 Authorization 標頭。

這也允許您控制 HttpClient 生命周期並重新使用它(無論如何您應該正常做!)否則 ODataClient 將在每次調用時創建一個新的 HttpClient 實例,這只是低效並導致套接字層上的大量流失。 通常不是問題,但可以使用大量代碼,所以只是一個好習慣。

下面的代碼是使用 Azure AD OAuth2 令牌連接到 Dynamics 365 OData Web API 的 .Net 核心應用程序的摘錄。

        httpClient.BaseAddress = new Uri(yourODataServiceRootURL);
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", yourBearerAccessToken);

        //Use the httpClient we setup with the Bearer token header
        var odataSettings = new ODataClientSettings(httpClient, new Uri("api/data/v9.1", UriKind.Relative));

        var odataClient = new ODataClient(odataSettings);

暫無
暫無

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

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