如何将身份验证 header(基本)从 .NetClient 传递到 OData 服务
How to pass authentication header (basic) to OData Service from a .NetClient
我试图按照这篇文章为 odata 服务实现客户端
我遇到的挑战:
按照文章中的步骤,我认为
1) (ProductClient).odata.config 不是自动生成的 - 我们可以创建一个
2) 需要凭据才能访问端点的客户端(在我的例子中是基本身份验证)
3) 最重要的是 - 在 Whosebug 上也找不到相关文章:)
已经为像我这样的新手发布了以下解决方案!
解决方案
为了实现类似于文章中提到的东西(即)
通过需要身份验证的 Odata 端点访问强类型 Odata 实体 -
static void ReadingODataEndPointByPassingMyBasicAuthCreds() {
// e.g. URL = http://localhost/myApi/odata
var url = ConfigurationManager.AppSettings["MyAPIBaseUrl"];
var container = new MyApi.Container(new Uri(url));
container.SendingRequest2 += SendBaseAuthCredsOnTheRequest;
foreach(var myEntity in container.MyEntities) {
Console.WriteLine(myEntity.Name);
Console.Write(string.Format("Description: {0}", myEntity.Description));
}
Console.Read();
}
private static void SendBaseAuthCredsOnTheRequest(object sender,
System.Data.Services.Client.SendingRequest2EventArgs e) {
var authHeaderValue = Convert.ToBase64String(Encoding.ASCII.GetBytes(String.Format("{0}:{1}", ConfigurationManager.AppSettings["username"]
, ConfigurationManager.AppSettings["password"])));
//this is where you pass the creds.
e.RequestMessage.SetHeader("Authorization", "Basic " + authHeaderValue);
}
我试图按照这篇文章为 odata 服务实现客户端
我遇到的挑战:
按照文章中的步骤,我认为
1) (ProductClient).odata.config 不是自动生成的 - 我们可以创建一个
2) 需要凭据才能访问端点的客户端(在我的例子中是基本身份验证)
3) 最重要的是 - 在 Whosebug 上也找不到相关文章:)
已经为像我这样的新手发布了以下解决方案!
解决方案
为了实现类似于文章中提到的东西(即)
通过需要身份验证的 Odata 端点访问强类型 Odata 实体 -
static void ReadingODataEndPointByPassingMyBasicAuthCreds() {
// e.g. URL = http://localhost/myApi/odata
var url = ConfigurationManager.AppSettings["MyAPIBaseUrl"];
var container = new MyApi.Container(new Uri(url));
container.SendingRequest2 += SendBaseAuthCredsOnTheRequest;
foreach(var myEntity in container.MyEntities) {
Console.WriteLine(myEntity.Name);
Console.Write(string.Format("Description: {0}", myEntity.Description));
}
Console.Read();
}
private static void SendBaseAuthCredsOnTheRequest(object sender,
System.Data.Services.Client.SendingRequest2EventArgs e) {
var authHeaderValue = Convert.ToBase64String(Encoding.ASCII.GetBytes(String.Format("{0}:{1}", ConfigurationManager.AppSettings["username"]
, ConfigurationManager.AppSettings["password"])));
//this is where you pass the creds.
e.RequestMessage.SetHeader("Authorization", "Basic " + authHeaderValue);
}