如何将身份验证 header(基本)从 .NetClient 传递到 OData 服务

How to pass authentication header (basic) to OData Service from a .NetClient

我试图按照这篇文章为 odata 服务实现客户端

http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/create-an-odata-v4-client-app

我遇到的挑战:

按照文章中的步骤,我认为

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); 

 }