如何将Bearer令牌添加到Simple OData Client

时间:2018-06-28 14:57:52

标签: xamarin.forms odata simple.odata.client

OData的新手,我需要访问需要身份验证和令牌的SAP Odata Web服务。假设我已对令牌进行了硬编码。如何将此令牌添加到Simple OData Client?

var settings = new Simple.OData.Client.ODataClientSettings();

settings.BaseUri = new Uri("https://..../UoM?$filter=wer eg '1000' &format=json");

settings.Credentials = new NetworkCredential("user1", "usrpwd");
var client = new ODataClient(settings);

请帮助我。

更新-

在此链接中:Simple Odata Client - How to add oAuth Token in each request header?

它没有显示如何添加硬编码的令牌。对于我的问题,我需要添加一个给定的令牌并发出一个Odata请求。我检查了Odata.org网站,但似乎找不到我的案例的任何示例。

我没有使用过simple.Odata.client的经验,能不能请我介绍一下。

谢谢

2 个答案:

答案 0 :(得分:2)

我相信您可以在发送请求之前使用ODataClientSettings.BeforeRequest操作更改请求。

在下面的示例中,我将请求的Authorization标头设置为'Bearer <Token>':

settings.BeforeRequest = req => {
    req.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "Your_Token_Here");
};

当然,您可以根据自己的特定身份验证类型来配置请求。

答案 1 :(得分:0)

您在示例中使用的URL显然是错误的,而不是SAP的OData URL。

您需要以下“ yourODataServiceRootURL”的基本URL,然后稍后在ODataclient设置中添加相对路径,例如。 “ api / data / v9.1”

一个更清晰的方法是使用HttpClient实例实例化ODataClient,而不是使用委托方法在每个Http调用上拦截并添加Authorization标头。

这还允许您从外部控制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);