首页 > 解决方案 > Dotnet 核心 CORS - PATCH 方法未包含在 Access-Control-Allow-Methods 中

问题描述

我一直在尝试为 dotnet core webapi 中的补丁方法启用 cors。

我尝试了以下代码:

services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
        {              
            builder
                .AllowAnyOrigin()
                .AllowAnyHeader()
                .AllowAnyMethod();
        }));

也试过.WithMethods("PATCH","GET")

app.UseCors("CorsPolicy")并像以前一样将其添加到管道中app.UseMvc()

我的选项调用请求标头:

Access-Control-Request-Headers: content-type Access-Control-Request-Method: PUT Origin: http://localhost:3000 Referer: http://localhost:3000/ Sec-Fetch-Mode: no-cors User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36

它返回带有以下标题的 204-No-Content。

Access-Control-Allow-Headers: content-type Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS Access-Control-Allow-Origin: * Date: Tue, 17 Sep 2019 10:59:23 GMT Request-Context: appId=cid-v1:46d7928d-c15f-4a2f-bded-4035f2eaba1f Server: Kestrel

响应标头中的Access-Control-Allow-Methods的值始终为“GET、PUT、POST、DELETE、HEAD、OPTIONS”。无论我尝试什么,都不会有补丁。

相同的代码适用于 Internet Explorer,并返回带有我在 WithMethods("PATCH", "GET") 方法中提到的方法名称的 Access-Control-Allow-Methods 。

标签: .net-corecors

解决方案


尝试AllowAnyMethod()完全删除对的调用,并将其他 REST 动词添加到WithMethods()

services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
    {              
        builder
            .AllowAnyOrigin()
            .AllowAnyHeader()
            .WithMethods("GET", "PUT", "PATCH", "POST", "DELETE", "OPTIONS");
    }));

推荐阅读