【问题标题】:All PUT Requests are blocked by CORS policy所有 PUT 请求都被 CORS 策略阻止
【发布时间】:2021-10-25 17:43:51
【问题描述】:

我有一个带有一些 cors-policies 的 .NET 5 API。

这是我的 CORS 设置:

public void ConfigureServices(IServiceCollection services)
{
    services.AddOptions();
    services.AddMemoryCache();
    services.AddCors(options =>
    {
        options.AddPolicy("cors",
            builder => builder
                .WithOrigins(
                    "http://localhost:4200",
                    "http://127.0.0.1:4200",
                    "http://rev-staging.myhost.ch")
                .WithMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .AllowAnyHeader()
                .AllowCredentials()
        );
    });
...
}

当然还有app.UseCors("cors");Startup.Configure(IApplicationBuilder, WebHostEnvironment )

当我在 localhost 上执行我的方法时,一切正常。

一旦我发布到api-rev-staging.myhost.ch 并在实时服务器上执行它们,对于我收到的所有 PUT 请求

CORS 已阻止从源“http://rev-staging.myhost.ch”访问“http://api-rev-staging.myhost.ch/api/v1/Vacancies/7”处的 XMLHttpRequest政策:请求的资源上不存在“Access-Control-Allow-Origin”标头。

(我更改了网址,因为它是公司网址)

所有 GET 和 POST 请求都可以工作 - 只是 PUT 请求不工作。从 http://rev-staging.myhost.ch 上的 Angular 前端执行或在我的本地计算机上从邮递员执行时,它们都不起作用 - 但 GET 和 POST 仍然有效。

知道这里有什么问题吗?

编辑:也许这很重要。后端在 IIS 上运行,与前端相同的服务器,只是另一个主机名。

【问题讨论】:

  • @gunr2171 实际上是的。因为 api- 是 API(后端),没有 api- 是角度前端。
  • 我之所以这么说,是因为您在 cors 设置中使用了 rev-staging 子域,而不是 api-rev-staging 子域。呃,反正你也可以不理我,我想我知道我为什么糊涂了。
  • 尝试检查您的服务器是否接受 Web API 的 PUT 和 DELETE。开箱即用这些动词被禁用:inthetechpit.com/2019/02/24/…
  • @NicolaBiada 这就是问题所在。必须编辑 web.config 并添加处理程序。感谢您的提示!
  • 好的,如果你同意我复制评论作为答案

标签: c# asp.net-core cors .net-5


【解决方案1】:

尝试检查您的服务器是否接受 Web API 的 PUT 和 DELETE。
开箱即用,这些动词被禁用。

这里有一些文档:
https://inthetechpit.com/2019/02/24/enable-put-and-delete-http-verbs-for-webapi-with-cors-on-iis-8-5/

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 2019-11-30
    • 2019-10-01
    • 2021-02-28
    • 2021-05-19
    • 2021-12-17
    • 1970-01-01
    • 2022-06-26
    • 1970-01-01
    相关资源
    最近更新 更多