C# ASP.NETCore3.1中的CORS策略

C# ASP.NETCore3.1中的CORS策略,c#,angular,typescript,asp.net-core,single-page-application,C#,Angular,Typescript,Asp.net Core,Single Page Application,我在.NETCore中有以下API代码 public void ConfigureServices(IServiceCollection services) { .............. services.AddCors(options => { options.AddPolicy("CorsPolicy", builder => builder

我在.NETCore中有以下API代码

public void ConfigureServices(IServiceCollection services)
{
..............
services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                                    builder => builder
                                    .AllowAnyMethod()
                                    .AllowAnyHeader()
                                    .WithOrigins("https://domain.com.xx")
                                    .AllowCredentials()
                                 );
            });

            services.AddControllers();
            services.AddMvc().AddMvcOptions(x=>x.EnableEndpointRouting = false);
}
我的配置方法是

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                //app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseRouting();
            app.UseAuthentication();
            app.UseAuthorization();
            app.UseCors("CorsPolicy");
            app.UseMvc();
        }
我正在从“源”获取对XMLHttpRequest的访问权https:domain.com.xx已被CORS策略锁定:请求的资源上不存在“访问控制允许源”标头。

客户端位于Angular 7中,我调用的方法是POST方法。我总是让它与http一起工作。在客户端,我正在添加拦截器

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
............
....
    url: request.url.replace('http://','https://')
}

这是否意味着问题在于令牌的身份验证?我正在使用Azure AD验证登录名,然后使用asp.net核心WebAPI验证登录名。

请尝试使用此选项。WithOrigins(“domain.com.xx”)

尝试此选项,看看是否适合您。忽略MVC部分,我只想指出顺序,因为管道顺序很重要

public void ConfigureServices(IServiceCollection services)
{
      services.AddCors();
      services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseCors(
        options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()
    );

    app.UseMvc();
}

对不起,我应该在某个时候发布/跟进。问题是防火墙应该被打开。我建议infra团队让我进去,并希望确认链接中的信息帮助了我们。终于开始工作了。

嗨,我改变了,但不幸的是结果是一样的。。它在configure方法中被阻塞了,你能把app.UseCors(“CorsPolicy”)代码移到app.UseAuthentication()上面吗?我推了它,但结果是一样的。我可以在Fiddler中看到包含详细信息的包,但我仍然得到相同的问题响应的HTTP状态码是什么?您可以使用浏览器devtools中的网络窗格进行检查。这是4xx还是5xx错误,而不是200 OK成功响应?使用“.AllowAnyOrigin()”是否可以正常工作?查看这是否有助于挖掘端点,因此没有MVC,但当我以本地主机的形式提供所有内容时,请求的源上仍然存在“Access Control Allow origin”头的问题。。我的客户端源代码是https:localhost:,没有问题,我正在本地运行它。只有当我将其更改为
https:
时,它才会引发CORS问题,服务器上也会出现这个问题。SSL证书或SSL的配置方式会有什么不同吗?是的,我想是的,问题可能来自您的主机服务,您使用的是哪种主机服务?嗨,Tony。。这是一个内部应用程序,使用反向代理在内部托管。我们为选定的客户提供访问权限。这是内部申请。我认为问题来自代理
public void ConfigureServices(IServiceCollection services)
{
      services.AddCors();
      services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseCors(
        options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()
    );

    app.UseMvc();
}