如何从.NetClient将身份验证标头(基本)传递给OData服务

时间:2015-04-07 23:09:18

标签: asp.net c#-4.0 odata asp.net-web-api2

我试图通过阅读本文来实现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)最重要的是 - 找不到有关stackoverflow的相关文章:)

已经为我这样的新手发布了以下解决方案!

1 个答案:

答案 0 :(得分:4)

解决方案

为了达到与文章中所提到的相似的东西(即)

通过需要身份验证的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); 

 }