获取 CORS 预检请求以遵循 ODATA 路由



我正在使用Microsoft.AspNet.WebApi.Cors使用[EnableCors(...)]属性为某些控制器(WebApi和OData)上的某些操作启用跨源请求。

这适用于所有 WebApi 请求和大多数 OData,但是在特定控制器上,我们有两个POST操作,[ODataRoute(...)]提供了不同的路由,并且其中任一操作的预检请求都会返回 500 错误,指出"找到与请求匹配的多个操作。看起来 CORS 不知道查找 OData 路由。

有没有人遇到过这个问题并想出解决方案?

这是路由配置:

// Web API routes
config.MapHttpAttributeRoutes();
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: null,
model: _GetModel());
// Web API configuration and services
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

这是具有重复操作的控制器:

[EnableCors("*", "*", "*")]
[ODataRoute("Action-1")]
[HttpPost]
public async Task<IHttpActionResult> Action(ODataActionParameters parameters, ODataQueryOptions<Guid> options)
{
...
}
[EnableCors("*", "*", "*")]
[ODataRoute("Action-2")]
[HttpPost]
public async Task<IHttpActionResult> Action(ODataActionParameters parameters, ODataQueryOptions<Guid> options)
{
...
}

这绝对不是 CORS 问题。这是您的路线图的问题。

您可能需要查看以下内容以解决"找到与请求匹配的多个操作"问题: 找到与请求匹配的多个操作:webapi 或 Web API 路由 - 找到与请求匹配的多个操作

如果您在问题中包含 Web API 路由定义,我们可以为您提供更好的帮助。

最后我只是改用Microsoft.Owin.Cors,并硬编码了一个我想为PolicyResolver启用 CORS 的路径列表。

这样做并不理想,但我认为这将花费不合理的时间来弄清楚如何使其正常工作。

最新更新