【问题标题】:Cors issues on WebAPIWebAPI 上的 Cors 问题
【发布时间】:2014-12-16 00:50:29
【问题描述】:

在 WebAPI 上启用 Cors

我在 WebApiConfig.cs 中有这个设置

config.EnableCors();

这就是为我的控制器方法设置属性的方式:

[EnableCors("http://dev.example.com,http://personal.example.com,http://www.example.com", // Origin
                    "Accept, Origin, Content-Type, Options",                       // Request headers
                    "POST",                                                        // HTTP methods
                    PreflightMaxAge = 600                                          // Preflight cache duration
        )]

但我仍然收到错误消息:“'Access-Control-Allow-Origin' 标头包含多个值。”

我还需要做什么来防止这种情况发生?我们必须允许来自所有三个域。但前 2 个是最后一个的子域。

【问题讨论】:

    标签: c# asp.net-web-api cors


    【解决方案1】:

    您的 web.config 文件中是否为 cors 设置了任何选项?即类似<add name="Access-Control-Allow-Origin" value="*"/>

    如果是,请确保将其删除,并仅通过代码控制 cors。

    编辑: 好吧,这意味着您始终将标头添加到响应中,无论请求命中哪个控制器,并且如果请求命中具有 EnableCors 属性的控制器,它将添加另一个标头。如果您删除了 Application_BeginRequest() 中的那个,它应该可以工作,但这意味着您需要使用 EnableCors 属性装饰所有其他控制器,这在您的情况下可能是可以接受的,否则,您需要添加一个 DelegateHandler 来检查请求并根据请求的控制器设置 cors。看看这个http://georgedurzi.com/implementing-cross-browser-cors-support-for-asp-net-web-api/ 它可能有助于从 DelegateHandlers 开始。希望对您有所帮助。

    【讨论】:

    • 我没有那个,但我在 Global.asax.cs 的 Application_BeginRequest() 中有 HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
    • Omar.Alani 我还有什么需要做的吗?我只希望启用 CORS 的一个控制器操作。
    • 所有其他操作呢,他们希望它们被禁用?
    • 你看过这篇文章了吗? asp.net/web-api/overview/security/… 。它们为特定控制器或特定操作启用 cors。
    • what about all other actions 我们只想要这个。该应用程序实际上用于不同的目的,但此应用程序中的某些功能需要用于另一个目的,我们将把该功能公开给我们的其他应用程序。由于我所有的允许都在同一个域上,即 www.domain.com、sub.domain.com、othersub.domain.com,我可以只使用一个来源吗?
    猜你喜欢
    • 2023-03-16
    • 2016-10-26
    • 2016-05-14
    • 2016-01-20
    • 2012-08-29
    • 2016-08-12
    • 2014-12-12
    • 2019-05-21
    • 2017-04-19
    相关资源
    最近更新 更多