C# 如何在MVCAPI中重写OData查询?

C# 如何在MVCAPI中重写OData查询?,c#,asp.net-mvc,entity-framework,odata,C#,Asp.net Mvc,Entity Framework,Odata,我正试图覆盖OData查询 我想升级我的应用程序 旧的应用程序获得如下用户对象: http://localhost:12345/api/users/?$filter=用户名eq“测试” 新的应用程序将获得如下用户对象: http://localhost:12345/api/users/?userName=test 我想支持旧的应用程序,并覆盖OData查询?$filter=… 通过重写,我可以使用新方法并返回正确的用户对象 有没有办法覆盖OData查询 附言:我需要保持$top和$orderby

我正试图覆盖OData查询

我想升级我的应用程序

旧的应用程序获得如下用户对象:

http://localhost:12345/api/users/?$filter=用户名eq“测试”

新的应用程序将获得如下用户对象:

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

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

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

有没有办法覆盖OData查询

附言:我需要保持$top和$orderby OData查询不变


谢谢

WCF DS没有提供一种方法来实现这一点。但是IIS可以帮助您

我们的想法是重写url,使用url重写模块更改您需要的url。例如,在您的情况下,您应该指定当IIS接收到包含用户名的请求时,它会将其重写为使用$filter


当然,我没有在您的应用程序中测试它,但我们在项目中就是这样做的,以保持版本兼容性

您应该阅读更多关于它的内容,因为您可以使用IIS模块做很多事情

<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>