asp.net core 跨域请求 输出告警咋回事儿?

睡神在睡觉 2019-08-22 11:12:50
asp.net core webapi工程,设定了跨域请求,允许所有请求

services.AddCors(c =>
{
c.AddPolicy("Any", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
});
});


public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, FilesConfigModel filesConfig)
{
//.....other
app.UseCors("Any");
//.....other
}


跨域请求都可以正常访问,功能也都正常,唯独有请求的时候,控制台会输出一个警告:


字面意思:CORS协议不允许同时指定通配符(任何)来源和凭证。如果需要支持凭据,请通过列出单个来源来配置策略。
但是现在就想允许所有来源访问怎么办呢?

不知道是什么原因,请问大神们是不是哪里操作有不当的,或者说怎么能解决或者屏蔽掉这个警告。
...全文
233 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
stherix 2019-08-22
  • 打赏
  • 举报
回复
意思就是AllowAnyOrigin和AllowCredentials不能一起用 如果要使证书生效,那么必须设置单独的Origin
assky124 2019-08-22
  • 打赏
  • 举报
回复
因为跨域本来就不是安全操作
睡神在睡觉 2019-08-22
  • 打赏
  • 举报
回复
引用 2 楼 exception92 的回复:
CORS中间件最好放到其它中间件之后.另外你的controller上加EnableCors特性了么

试了下,放在不影响跨域效果的未知依旧如此,放在太靠后直接影响跨域了-。-
睡神在睡觉 2019-08-22
  • 打赏
  • 举报
回复
引用 2 楼 exception92 的回复:
CORS中间件最好放到其它中间件之后.另外你的controller上加EnableCors特性了么


好的,我去试试看,把它放在最后,controller上没有加EnableCors特性,直接引用到了所有UseCors("Any")
睡神在睡觉 2019-08-22
  • 打赏
  • 举报
回复
引用 1 楼 tangyanzhi1111 的回复:
只是Warning ,不是Error,没什么大问题


嗯,问题不大,就是想找找是啥原因,强迫症-。-
  • 打赏
  • 举报
回复
CORS中间件最好放到其它中间件之后.另外你的controller上加EnableCors特性了么
江湖评谈 2019-08-22
  • 打赏
  • 举报
回复
只是Warning ,不是Error,没什么大问题
睡神在睡觉 2019-08-22
  • 打赏
  • 举报
回复
引用 9 楼 stherix 的回复:
.AllowCredentials();
这个去掉就不会有这个提示了,你即使加上也没有生效,因为前面有AllowAnyOrigin
这个是认证用的,如果你没用到默认的那些认证服务,或者是自定义的认证,那么实际是不需要加的

如果需要用到
那么需要用WithOrigins指定特定的Origin,而不是Any


赞赞赞,之前一直没怎么注意过这个内容,受教了!
stherix 2019-08-22
  • 打赏
  • 举报
回复
.AllowCredentials(); 这个去掉就不会有这个提示了,你即使加上也没有生效,因为前面有AllowAnyOrigin 这个是认证用的,如果你没用到默认的那些认证服务,或者是自定义的认证,那么实际是不需要加的 如果需要用到 那么需要用WithOrigins指定特定的Origin,而不是Any
睡神在睡觉 2019-08-22
  • 打赏
  • 举报
回复
引用 7 楼 stherix 的回复:
意思就是AllowAnyOrigin和AllowCredentials不能一起用
如果要使证书生效,那么必须设置单独的Origin


是的,刚开始是这样


services.AddCors(c =>
{
c.AddPolicy("Any", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
});

c.AddPolicy("Gy", policy =>
{
policy.WithOrigins("localhost:10010")
.WithMethods("get", "post", "put", "delete")
.WithHeaders("Authorization");
.AllowAnyHeader();
});
});
return services;



看提示是不能复合使用,所以把下面的Gy注释掉了,但是运行结果一样;

证书我们没有使用,或者说这个warn就是因为我没用证书和AllowCredentials来操作,他必须给的一个提示么?因为它认为这是不安全操作?

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧