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

时间:2017-07-05 09:00:20

标签: c# cors asp.net-web-api2 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)
{
    ...
}

2 个答案:

答案 0 :(得分:1)

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

您可能想看看这个解决'找到符合请求的多个操作'问题: Multiple actions were found that match the request: webapiWeb API Routing - multiple actions were found that match the request

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

答案 1 :(得分:0)

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

这样做并不理想,但我认为这需要花费不合理的时间来确定如何使其正常工作。