Простой клиент Odata — как добавить токен oAuth в каждый заголовок запроса?

В прокси-клиенте 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?


person Rahul    schedule 26.01.2017    source источник


Ответы (2)


Видимо, я должен объяснить, почему это ответ.

Объяснение: именно так вы добавляете токен для 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);
person Paul - Soura Tech LLC    schedule 26.04.2017
comment
Пожалуйста, рассмотрите возможность добавления объяснения, почему это ответ. - person David L; 27.04.2017

Вместо того, чтобы использовать метод делегата для перехвата и добавления заголовка Authorization при каждом вызове Http, более четким/чистым решением является создание экземпляра ODataClient с экземпляром HttpClient.

Это также позволяет вам контролировать жизненный цикл HttpClient и повторно использовать его (как вы и должны делать обычно в любом случае!), иначе ODataClient будет создавать новый экземпляр HttpClient при каждом вызове, а это просто неэффективно и вызывает много оттока на уровне сокета. Обычно это не проблема, но может быть на большом объеме кода, так что просто хорошая привычка.

Приведенный ниже код представляет собой фрагмент основного приложения .Net, использующего токен Azure AD OAuth2 для подключения к веб-API Dynamics 365 OData.

        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);
person Rohan    schedule 14.10.2019