MSGraph API的代理

时间:2018-07-31 10:50:26

标签: rest asp.net-web-api odata microsoft-graph

我正在尝试创建适配器(将用作传递的WEB API) 调用MS Graph API来管理我的Active Directory。

AD对象(例如应用程序和用户)将被定制以满足我们的应用程序需求(删除一些属性,添加一些扩展属性等),并且在调用之前和之后,在适配器层中将发生从我们特定于应用程序的对象到AD对象的转换。 MS Graph API。

MS Graph API currently supports OData queries。 应用程序和用户将按页面阅读。 如果必须在通过Web API层的传递中提供相同的OData选项,该怎么做?

  • API A支持OData查询。
  • API B调用API A中支持OData查询的方法。
  • API B向客户端公开。当客户端从API B调用方法时  对于OData $Filter,必须返回结果。

如何支持API B中的OData选项?

先谢谢了。

2 个答案:

答案 0 :(得分:1)

好吧,我不确定我是否正确回答了您的问题,但据我了解,您只想将API调用代理到MS Graph并即时对响应进行一些更改。

OData查询只是简单的查询参数(请参见OData tutorial)。因此,基本上,您只需要在代理中获取这些查询参数并将它们转发到MS Graph。这样,您将获得的响应将符合原始查询。

但是,根据您处理数据的方式,最终可能不符合用户查询。例如:

  • 用户进行了$select(Id)查询,但是您的逻辑添加了自定义属性Foo。用户只想要Id,但您仍然添加了Foo
  • 用户进行了$orderby Name asc查询,但是您的逻辑修改了属性Name。按照您的逻辑,可能无法订购它。
  • 用户希望在$filter属性上进行Foo查询。 MS Graph会抱怨,因为它不知道Foo属性。
  • 等等。

如果要处理这种情况,那么就必须解析不同的OData查询并相应地调整逻辑。 $orderby$top / $skip$count$expand$select应该很简单; $filter$search需要做更多的工作。

答案 1 :(得分:0)

谢谢。我一直在寻找解决方案。 https://community.apigee.com/questions/8642/how-do-we-fetch-the-query-parameters-odata-standar.html

我不是解析URL以获取OData查询参数,而是想了解处理OData请求的标准方法。 现在,我正在执行以下操作以提取OData查询参数并将其传递给MSGraph API。 字符串strODataQuery = String.Join(“&”,HttpContext.Request.Query.Where(kvp => kvp.Key.StartsWith(“ $”)).Select(kvp => String.Format(“ {0} = {1 }“,kvp.Key,Uri.EscapeDataString(kvp.Value))));

我正在检索结果后执行转换。

致谢