【问题标题】:CORS Policy in ASP .net core3.1ASP .net core 3.1 中的 CORS 策略
【发布时间】:2020-05-22 01:11:58
【问题描述】:

我在 .net 核心中有以下 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();
        }

我得到一个 从源“https:domain.com.xx”访问 XMLHttpRequest 在“https://apiservername/api/mycall”已由 CORS 策略计时:不存在“Access-Control-Allow-Origin”标头在请求的资源上。

客户端在 Angular 7 中,我调用的方法是 POST 方法。我一直使用http。在我正在添加的拦截器的客户端

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

想知道我是否在这里遗漏了什么。客户端站点(角度)和 API 端(.NET Core ASP 3.1)都设置为 https。 ---已编辑-- 我启用了异常处理,之后我从事件查看器中得到了以下错误。

System.InvalidOperationException: IDX20803: Unable to obtain configuration from: 'https://login.microsoftonline.com/common/.well-known/openid-configuration'.
 ---> System.IO.IOException: IDX20804: Unable to retrieve document from: 'https://login.microsoftonline.com/common/.well-known/openid-configuration'.
 ---> System.Net.Http.HttpRequestException: No connection could be made because the target machine actively refused it.
 ---> System.Net.Sockets.SocketException (10061): No connection could be made because the target machine actively refused it.
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---

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

【问题讨论】:

  • 在配置方法中,你能把 app.UseCors("CorsPolicy") 代码移到 app.UseAuthentication() 上面吗?
  • 我推了它,但结果是一样的。我可以在 Fiddler 中看到包含详细信息的包,但我仍然遇到同样的问题
  • 响应的 HTTP 状态码是什么?您可以使用浏览器开发工具中的网络窗格进行检查。是 4xx 还是 5xx 错误而不是 200 OK 成功响应?
  • 使用 '.AllowAnyOrigin()' 是否可以正常工作

标签: c# angular typescript asp.net-core single-page-application


【解决方案1】:

很抱歉应该在一段时间前发布/跟进。问题是应该打开它的防火墙。我建议基础设施团队让我进入并喜欢确认链接中的信息UnblockFirewall 帮助了我们。终于成功了。

【讨论】:

    【解决方案2】:

    试试这个,看看它是否适合你。忽略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();
    }
    

    【讨论】:

    • 我的是一个端点,所以没有 MVC,但仍然给出与请求源上存在 Access-Control-Allow-origin' 标头相同的问题
    • 当我将所有内容作为 localhost 提供时,它可以工作。我的客户端来源是 https:localhost:&lt;port&gt;,没有问题,我在本地运行它。只有当我将其更改为 https:&lt;servername.com.xx&gt; 时,它才会引发 CORS 问题,而且服务器上也是如此。 SSL 证书或 SSL 的配置方式会有什么不同吗?
    • 是的,我认为问题可能出在您的托管服务上,您使用的是哪个托管服务?
    • 嗨,Tony.. 这是内部应用程序,使用反向代理在内部托管,我们为选定的客户提供访问权限。这是一个内部应用程序。
    • 我认为问题来自代理
    【解决方案3】:

    试试这个 .WithOrigins("domain.com.xx")

    【讨论】:

    • Hi Duy,我改了,但不幸的是结果是一样的..它被阻止了
    猜你喜欢
    • 2020-04-06
    • 2017-10-14
    • 2021-02-14
    • 2020-11-02
    • 2020-10-25
    • 2020-07-16
    • 1970-01-01
    • 2020-07-30
    • 2020-05-01
    相关资源
    最近更新 更多