【问题标题】:CORS not enabled although configured for web API虽然为 Web API 配置了 CORS,但未启用
【发布时间】:2022-01-07 05:00:15
【问题描述】:

尝试从 Angular 项目访问使用 Web API 2.0 (asp.net) 制作的本地 API。

请求结果

从源“http://localhost:4200”访问“http://localhost:50581/MD/GetUserMD”处的 XMLHttpRequest 已被 CORS 策略阻止:没有“Access-Control-Allow-Origin”标头出现在请求的资源上。

但我不明白,因为我在 webAPIConfig 中添加了 EnableCors

并在所有控制器中指定这些。

有什么办法可以解决这个问题吗? 提前谢谢你。

【问题讨论】:

    标签: asp.net asp.net-web-api


    【解决方案1】:

    CORS 允许您指定谁可以调用您的 API。因此,需要的不仅仅是启用 CORS;您需要设置策略。有几种方法可以做到这一点:

    1. 使用[EnableCors] 属性,可以在控制器或操作级别设置:
    [EnableCors(origins: "http://localhost:4200", headers: "*", methods: "*")]
    
    1. 对于您的整个应用程序:
    public static void Register(HttpConfiguration config)
    {
        var cors = new EnableCorsAttribute("[EnableCors(origins: "http://localhost:4200", "*", "*");
        config.EnableCors(cors);
    }
    

    可以将来源设置为 "*" 以允许任何网站向您的 API 发出请求,但要小心。

    更多信息在这里:Enable cross-origin requests in ASP.NET Web API 2

    【讨论】:

    • 感谢您的评论,加布里埃尔!我发现 Chrome 出于安全原因阻止了 localhost API 调用,因此我一直在禁用 Web 安全性进行开发。你知道解决这个问题的方法吗?
    • 根据this answer,Chrome 将阻止它,除非 1. 主站点是 HTTPS 和 2. API 具有适当的 CORS 标头。因此,通过我的回答,您可以满足#2。为了满足 #1,您需要在您的 localhost:50581 站点上启用 HTTPS。如果那是 Visual Studio 中的开发站点,请关注 this answer
    • 我一定会试试的,谢谢你的回答!
    猜你喜欢
    • 2011-02-11
    • 2015-05-17
    • 2017-07-09
    • 2019-04-18
    • 1970-01-01
    • 2012-01-26
    • 2017-12-16
    • 2016-05-11
    • 2021-10-28
    相关资源
    最近更新 更多