我正在使用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)
{
...
}
答案 0 :(得分:1)
这绝对不是CORS问题。这是您的路线图的问题。
您可能想看看这个解决'找到符合请求的多个操作'问题: Multiple actions were found that match the request: webapi 或Web API Routing - multiple actions were found that match the request
如果您在问题中包含Web API路由定义,我们可以提供更好的帮助。
答案 1 :(得分:0)
最后,我改为使用Microsoft.Owin.Cors
,并硬编码了我想为PolicyResolver
启用CORS的路径列表。
这样做并不理想,但我认为这需要花费不合理的时间来确定如何使其正常工作。