简单的 Odata 客户端 - 如何在每个请求中添加 oAuth 令牌 header?
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);
不是使用委托方法在每次 Http 调用时拦截和添加授权 header,clearer/cleaner 解决方案是使用 HttpClient 实例实例化 ODataClient。
这还允许您控制 HttpClient 生命周期和 re-use 它(无论如何您都应该正常进行!)否则 ODataClient 将在每次调用时创建一个新的 HttpClient 实例,这效率低下并且会导致很多问题套接字层上的流失。通常不是问题,但可能会出现大量代码,所以这是一个好习惯。
下面的代码是使用 Azure AD OAuth2 令牌连接到 Dynamics 365 OData Web 的 .Net 核心应用程序的摘录 API。
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);
在 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);
不是使用委托方法在每次 Http 调用时拦截和添加授权 header,clearer/cleaner 解决方案是使用 HttpClient 实例实例化 ODataClient。
这还允许您控制 HttpClient 生命周期和 re-use 它(无论如何您都应该正常进行!)否则 ODataClient 将在每次调用时创建一个新的 HttpClient 实例,这效率低下并且会导致很多问题套接字层上的流失。通常不是问题,但可能会出现大量代码,所以这是一个好习惯。
下面的代码是使用 Azure AD OAuth2 令牌连接到 Dynamics 365 OData Web 的 .Net 核心应用程序的摘录 API。
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);