【问题标题】:Get CORS preflight request to follow ODATA routing获取 CORS 预检请求以遵循 ODATA 路由
【发布时间】:2017-07-05 09:00:19
【问题描述】:

我正在使用 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)
{
    ...
}

【问题讨论】:

    标签: c# asp.net-web-api2 odata


    【解决方案1】:

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

    您可能想看看这个来解决“找到与请求匹配的多个操作”问题: Multiple actions were found that match the request: webapiWeb API Routing - multiple actions were found that match the request

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

    【讨论】:

    • 谢谢,我已经用配置更新了问题。我对 WebApi 不是很熟悉,而且我从其他人那里继承了它,所以这很可能是代码中其他地方的问题。这些操作确实适用于正常的 POST,但只是在我尝试启用 CORS 时出现问题。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-12
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      • 2021-03-27
      • 2016-07-25
      • 1970-01-01
      相关资源
      最近更新 更多