我正在使用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 的路径列表。
这样做并不理想,但我认为这将花费不合理的时间来弄清楚如何使其正常工作。