我正在尝试覆盖OData查询..
我想升级我的应用程序。
OLD 应用程序获取User对象: http://localhost:12345/api/users/?$filter=userName eq 'test'
NEW 应用程序将获取User对象:
http://localhost:12345/api/users/?userName=test
我想支持旧应用程序,并覆盖OData查询?$filter=...
使用Overriding我可以使用new方法并返回正确的User对象。
有没有办法覆盖OData查询?
P.S:我需要保持$ top& $ orderby OData查询未触及...谢谢!
答案 0 :(得分: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模块执行许多操作。