0

我正在尝试覆盖 OData 查询..

我想升级我的应用程序。

OLD应用程序获取 User 对象,如下所示:

http://localhost:12345/api/users/?$filter=userName eq 'test'

应用程序将像这样获取 User 对象:

http://localhost:12345/api/users/?userName=test

我想支持旧应用程序,并覆盖 OData 查询?$filter=...

通过覆盖,我可以使用新方法并返回正确的用户对象。

有没有办法覆盖 OData 查询?

PS:我需要保持 $top 和 $orderby OData 查询不变...

谢谢!!

4

1 回答 1

2

WCF DS 没有提供这样做的方法。但是 IIS 可以帮助您。

这个想法是重写 url,使用 URL Rewrite 模块将其更改为您需要的内容。例如,在您的情况下,您应该指定当 IIS 收到包含userName的请求时,它会重写它以使用$filter代替。

<rewrite>
  <rules>
    <rule name="Compatibility with older versions" enabled="true" stopProcessing="true">
      <match url="^api/users/?$userName eq (.*)" />
      <action type="Rewrite" url="http://localhost:12345/api/users/?$filter={R:2}"/>
    </rule>
  </rules>
</rewrite>

当然,我没有在您的应用程序中对其进行测试,但这就是我们在项目中进行测试以保持版本兼容性的方式。

您应该阅读更多有关它的信息,因为您可以使用该 IIS 模块做很多事情。

于 2013-01-26T22:36:42.123 回答