导航
  • 主页
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm
  • WPF
  • 问答

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协议不允许同时指定通配符(任何)来源和凭证。如果需要支持凭据,请通过列出单个来源来配置策略。
但是现在就想允许所有来源访问怎么办呢?

不知道是什么原因,请问大神们是不是哪里操作有不当的,或者说怎么能解决或者屏蔽掉这个警告。
...全文
70 点赞 收藏 10
写回复
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,没什么大问题


嗯,问题不大,就是想找找是啥原因,强迫症-。-
回复
exception92 2019-08-22
CORS中间件最好放到其它中间件之后.另外你的controller上加EnableCors特性了么
回复
tangyanzhi1111 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来操作,他必须给的一个提示么?因为它认为这是不安全操作?
回复
发动态
发帖子
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.