有一个问题:我无法从 Chrome 的扩展程序下与后端通信。
原因是Cors,但我已经部分解决了。
我们不明白该怎么做Preflight requests
。
所有与 Cors 和 Asp net core 相关的答案都差不多:
services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
但是,它不适用于Preflight requests
.
作为拐杖,我知道一个平庸的解决方案:
[HttpGet]
[Route("x")]
public IActionResult X()
{
return new OkObjectResult(some_staff);
}
[HttpPatch]
[Route("x")]
public IActionResult XPatch()
{
return new OkResult();
}
- 绑一个
Route
平庸Patch
的一个,每个回报200。
但是在第四条路线之后,我的手指枯萎了,显然,必须有一个解决方案。
该方法
AddCors()
添加配置CORS
但不执行其他任何操作,即 在您的DI
配置对象中出现 (CorsOptions
),您在其中说您允许任何来源、标头、方法。为了让 CORS 开始为您工作,您还需要使用UseCors()
,此方法将添加必要的middleware
(CorsMiddleware
),这将添加正确的标头 (Access-Control-Allow-Origin
,Access-Control-Allow-Methods
...,浏览器期望在响应中看到) 并处理preflight
请求.因为 如果您
policy
不使用默认名称,则需要传递名称policy
:UseCors("MyPolicy")
并在之前调用它UseRouting()
。文档