我正在尝试从asp.net core 3.1响应获取数据,所以我以请求登录并获取jwt令牌。之后,我想发送一个从api获取数据的请求,但它会导致“预检请求”从源“ http:// localhost:3000”访问“ https:// localhost:44328 / Address”的访问已被阻止CORS策略:对预检请求的响应未通过访问控制检查:请求的资源上不存在“ Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“ no-cors”,以在禁用CORS的情况下获取资源。 apiAddress.js:24 GET https:// localhost:44328 / Address net :: ERR_FAILED“,我使用Visual Studio localhost作为api服务器,并按如下所示配置启动:
//in ConfigureServices
services.AddCors(options =>
{
options.AddPolicy(name: AllowedOrigins,
builder =>
{
builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.SetIsOriginAllowed(hostName => true);
});
});
//in configure
app.UseCors(AllowedOrigins);
我的提取请求类似于以下reactjs:
const response = await fetch(url, {
'method': 'GET',
'mode': 'cors',
'credentials': 'include',
'headers': {
'Content-Type': 'application/json; charset=utf-8;',
//'Content-Type':'application/x-www-form-urlencoded',
'Authorization':`bearer ${token}`
}
});
最后我的控制器如下:
[ApiController, EnableCors("AllowedOrigins"), Authorize, Route("[controller]")]
public class AddressController : ControllerBase
哪里出了问题,我必须提到其他没有[Authorize]属性正常工作的动作,但是使用它的动作不起作用? 有人提到我应该在iis中启用选项,但没有说明如何?
答案 0 :(得分:0)
您可能需要在IIS上启用CORS。以下是操作步骤。
答案 1 :(得分:0)
对预检请求的响应未通过访问控制检查:....
没有[Authorize]属性的其他操作正常,但没有作用
在this doc中,您将找到:
CORS预检请求用于确定服务器是否将请求的资源设置为跨源共享。并且OPTIONS请求始终是匿名的,如果未启用匿名身份验证,服务器将无法正确响应预检请求。
在IIS服务器上托管时,您可以尝试安装IIS CORS module并配置站点/应用程序以使其正常运行。
此外,如果您想使其与IIS Express一起在本地运行,出于对CORS进行测试的目的,您可以尝试允许匿名访问。
或者使用kestrel运行它并编写自定义中间件以正确响应预检请求。