【发布时间】:2020-11-06 18:25:11
【问题描述】:
这是我的 Cors 初始化代码:
app.UseCors(builder =>
builder.AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin());
然而,当我运行 PATCH 时,我在 Chrome 83 中收到以下错误:
CORS 政策已阻止从源“https://users-dev.myproject.com”获取“https://api-dev.myproject.com/api/mp”的访问权限:无“访问权限-请求的资源上存在 Control-Allow-Origin' 标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
这是调用 api 的代码(来自 React):
const response = await fetch(API_URL() + `/mp`, {
method: 'PATCH',
body: `"${JSON.stringify(mpForm.values)}"`,
headers: {
Authorization: 'Bearer ' + apiToken,
'Content-type': 'application/json'
}
});
这里可能出了什么问题?对这个域的大多数 API 请求都很好。目前只有这个。
更新
万一您遇到这个确切的问题,这个问题的根本原因是身体线条:
body: `"${JSON.stringify(mpForm.values)}"`,
通过重构 API 以使用这样的主体来解决问题:
body: JSON.stringify(mpForm.values),
这是一个问题的原因是 stringify 函数在返回值中嵌入了双引号,导致传递这样的字符串:
'"{"foo":"bar"}"'
然后导致 CORS 错误。
【问题讨论】:
-
显示此请求的 Chrome 跟踪,以及对相同 API 的类似请求的跟踪。我们想查看标头和失败并导致退回的特定请求。
-
查看 OPTIONS 请求的响应,寻找与您的呼叫站点匹配的允许来源。如果不存在,请在您的 API 中查找其他冲突配置
-
请更新标签以反映这是 ASP.Net 还是核心?
-
@ChrisSchaller 感谢您的提问。现在已经解决了,所以很遗憾我无法重现这些痕迹。但是,问题是由于请求中的正文格式不正确。
标签: c# asp.net-core webapi