在 IIS 中托管时找不到 OData $batch 端点

OData $batch endpoint not found when hosted in IIS

我正在努力解决这个问题 - 我有一个使用 .Net ODataConventionModelBuilder 开发的 OData V4 服务。 运行 "within visual studio"(即 localhost:port/service)时一切正常,但是当我将服务发布到 IIS 时,我无法再进行批处理请求。

示例 1:运行 在 IISExpress 下,而 visual studio 是 运行

获得http://localhost:1234/service/SomeResource - 可以正常访问资源和 return JSON 响应

POST http://localhost:1234/service/$批量 - 可以很好地为多个 GET

发送批处理请求(显然带有正文数据)

示例 2:在 IIS 下托管

获取http://localhost/service/SomeResource - 可以正常访问资源和 return JSON 响应

POSThttp://localhost/service/$批量 - 失败并显示 HTTP 404 Not Found "Message": "No HTTP resource was found that matches the request URI 'http://localhost/service/$batch'.", "MessageDetail": "No route providing a controller name was found to match request URI 'http://localhost/service/$batch'"

所以我被卡住了我不明白为什么路由在 运行 在 studio/IISExpress 下而不是在正确的 IIS 下工作正常。

好吧,这似乎是解释 url 的问题,因为 $batch 部分。

将这个添加到 web.config 就解决了。

<system.webServer>
    <handlers>
       <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
       <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>