如何在MVC API中覆盖OData查询

本文关键字:覆盖 OData 查询 API MVC | 更新日期: 2023-09-27 17:54:30

我试图覆盖OData查询..

我想升级我的应用程序。

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

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

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

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

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

通过重写,我可以使用新方法并返回正确的User对象。

是否有一种方法来覆盖OData查询?

p。S:我需要保留$top &;

谢谢! !

如何在MVC API中覆盖OData查询

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

这个想法是重写url,改变它为你需要使用url重写模块。例如,在您的情况下,您应该指定当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模块做很多事情。