如何解决反应js请求和jwt的Cors问题
我正在尝试从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中启用选项,但没有说明如何?
解决方法
您可能需要在IIS上启用CORS。以下是操作步骤。
- 打开Internet信息服务(IIS)管理器。
- 右键单击要启用CORS的站点,然后转到“属性”。
- 更改为“ HTTP标头”标签。
- 在“自定义HTTP标头”部分中,单击“添加”。
- 输入Access-Control-Allow-Origin作为标题名称。
- 输入*作为标题值。
- 单击确定两次。
对预检请求的响应未通过访问控制检查:....
没有[Authorize]属性的其他操作正常,但没有作用
在this doc中,您将找到:
CORS预检请求用于确定服务器是否将请求的资源设置为跨源共享。并且OPTIONS请求始终是匿名的,如果未启用匿名身份验证,服务器将无法正确响应预检请求。
在IIS服务器上托管时,您可以尝试安装IIS CORS module并配置站点/应用程序以使其正常运行。
此外,如果您想使其与IIS Express一起在本地运行,出于对CORS进行测试的目的,您可以尝试允许匿名访问。
或者使用kestrel运行它并编写自定义中间件以正确响应预检请求。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。