Web API 控制器不尊重 CORS 来源

Posted

技术标签:

【中文标题】Web API 控制器不尊重 CORS 来源【英文标题】:Web API controller does not respect CORS origin 【发布时间】:2014-12-02 08:31:49 【问题描述】:

我最近在我的 Web API 控制器中实现了 cors。我正在从 domain2 上的客户端调用位于 domain1 上的 web api。

对于来源,我指定了一个虚假的网址。据我了解,仅接受来自此网址的呼叫。这是正确的吗?

所以只有来自

 http://notgoingtowork.com

将能够调用控制器并返回数据

这是我的控制器(域 1)

public class TestController : ApiController

    [EnableCors(origins: "http://notgoingtowork.com", headers: "*", methods: "*")]
    public int Get()
    
       return 1
    

然后在我的另一个域上,ajax 调用 (domain2)

   $.ajax(
            url: "http://domain1/api/Test/Get", 
            method: "GET", 
            headers:  "accept": "application/json;odata=verbose" ,
            success: function (data)alert("it worked");,
            error: function (error)  alert("Did not work"); 
        )

但是,请求仍然成功并且正在返回数据。由于客户端不在'http://notgoingtowork.com'上,它如何能够成功地做到这一点?我错过了什么?

我在 IE11 上执行此操作。这在 chrome 上运行良好。

编辑: 这是 WebApiConfig.cs 文件 这是相当通用的。我刚刚添加了 Cors 部分

public static class WebApiConfig

    public static void Register(HttpConfiguration config)
    
        config.EnableCors();
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/controller/id",
            defaults: new  id = RouteParameter.Optional 
        );
    

【问题讨论】:

您是否也验证了data 的值?不仅仅是alert() 是的。所有数据都会返回 您的Startup.cs 中是否有任何启用cors 的内容? 进行 Ajax 调用后,您的 IE 11 控制台中是否有任何内容?另外,您的客户实际上是在不同的域上吗? 我添加了其中的 web api 配置部分。 IE 控制台中没有显示任何内容。除了标准的 200 OK 结果 【参考方案1】:

IE 11中有一个设置“跨域访问数据源”,请确认是否禁用:

【讨论】:

您能解释一下该设置对 API 调用的作用吗? @PawOrmstrupMadsen 它基本上不允许跨域访问数据源,这是一个安全且推荐的设置。只有在知道自己在做什么的情况下才应该启用此功能。 我在 2 个不同的 url 上设置了一个 angular 6 webapp 和一个具有正确 cors 设置的 aspnet core api。该api实际上是使用windows auth生成一个jwt令牌,角度应用程序使用该令牌访问数据,但如果pc启用了此设置,IE 11会不断要求提供凭据,但无法正确输入那些。 Chrome 似乎没有使用那个“互联网选项”,所以它工作正常。如果我将其设置为提示或禁用 IE 11 将再次正常工作。所以我想知道该设置对 xhr 调用有什么作用? 请求头好像乱了?我不对那个设置负责,它是一个在 GPO 中启用它的大型组织。我们正试图让他们禁用它。

以上是关于Web API 控制器不尊重 CORS 来源的主要内容,如果未能解决你的问题,请参考以下文章

在 .Net Core 中为 WEB API 控制器定义不同的(不同于全局的)CORS 策略

CORS POST 请求不起作用 - 选项(错误请求) - 不允许来源

如何在 WEB API 的 ASP.NET MVC 控制器级别中启用 CORS? [复制]

MVC Web API - CORS 策略不起作用

AWS Api Gateway CORS“访问控制允许来源”正则表达式与 Cloudformation

Angular 和 Laravel CORS 访问控制允许来源问题