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

标签 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 的相关文章:)

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

最佳答案

解决方案

为了实现类似于文章中提到的东西(即)

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

 }

关于asp.net - 如何将身份验证 header (基本)从 .NetClient 传递到 OData 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29502984/

相关文章:

c# - 如何在 Medium Trust 中写入 Web.Config?

c#-4.0 - 扫描目录时出现 UnauthorizedAccessException 'User\Documents\My Music'

asp.net-core - 有没有办法处理 asp.net core odata 错误

c# - 展开 WCF 数据服务 (OData) 的投影(选择)

.net - 使用 .resx 文件和附属程序集是否有任何性能差异?

c# - 验证在 Blazor 服务器端不起作用

c# - 组合 3 个 float ?

.net - 如何调试打包在 .NET 程序集中的 .NET 代码(作为单独软件运行)

c# - 具有多个 DataContext 的事务

jquery - 如何添加Access-Control-Allow-Origin?