首页 > 解决方案 > CORS 策略已阻止从源 '' 访问 '' 处的 XMLHttpRequest:请求中不存在“Access-Control-Allow-Origin”标头

问题描述

我已经开发了 Asp.Net Core 3.1 API 并通过 IIS 部署在服务器上,如果我从 Postman 或浏览器发送 GET/POST 请求,它会按预期工作,但下面的代码会出错。

$.ajax({
   type: 'GET',
   crossDomain: true,
   dataType: 'json',
   url: 'myUrl',
   success: function(jsondata){
   }
})

错误:

从源“http://localhost:63765”访问“http://server:8080/API/GetMethod?currency=INR”的 XMLHttpRequest 已被 CORS 策略阻止:没有“Access-Control-Allow-Origin”标头存在于请求的资源上。

我使用以下代码C# 代码从我的应用程序中禁用了 CORS :

[DisableCors]
[Route("[controller]")]
[ApiController]
[AllowAnonymous]
public class APIController : ControllerBase
{

启动.cs

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddLog4Net();

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

        

app.UseHttpsRedirection();

app.UseRouting();

app.UseCors();

app.UseAuthorization();

所以我尝试在控制器级别禁用 CORS,我也尝试过,jsonp而不是JSON,它仍然出现相同的错误。

我在这里有两个问题。

  1. 这是客户端还是服务器端的问题?
  2. 如何修复错误?

注意:我能够从浏览器和 Postman 发送 GET 请求,但是使用此客户端代码,我遇到了与 CORS 相关的问题。

标签: javascriptc#jqueryajaxasp.net-core

解决方案


1.应该是服务器端的问题。因为服务器阻止了发出请求的来源。

2.我之前在功能上也遇到过类似的问题。您可以在 startup.cs 中进行一些配置,而不是使用[DisableCors]and[AllowAnonymous]

详细信息: https ://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-3.1

AllowAnyOrigin允许使用任何方案(http 或 https)来自所有来源的 CORS 请求。AllowAnyOrigin 是不安全的,因为任何网站都可以向应用程序发出跨域请求。

推荐的解决方案(如果这不起作用,您可以使用 AllowAnyOrigin):

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options =>
        {
            options.AddPolicy(MyAllowSpecificOrigins,
                                builder =>
                                {
                                    builder.WithOrigins("http://example.com",
                                                        "http://www.contoso.com")
                                                        .AllowAnyHeader()
                                                        .AllowAnyMethod();
                                });
        });

        services.AddControllers();
    }  

推荐阅读