如何在MVC API中覆盖OData查询?

时间:2013-01-20 14:53:46

标签: c# asp.net-mvc entity-framework odata

我正在尝试覆盖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查询未触及...

谢谢!

1 个答案:

答案 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模块执行许多操作。