繁体   English   中英

ASP.NET Core CORS WebAPI:不保留 Access-Control-Allow-Origin 标头

[英]ASP.NET Core CORS WebAPI: persist no Access-Control-Allow-Origin header

我在我的 web.api 的生产服务器上部署了应用程序,我在浏览器控制台中收到以下错误(似乎已解决):

访问 XMLHttpRequest 在
' https://ebbtelemetrywebapi.azurewebsites.net/api//events ' from origin ' https://ebbwatelem.azurewebsites.net ' 已被 CORS 策略阻止:没有 'Access-Control-Allow-Origin' 标头存在于请求的资源。

在此错误之前,我有以下内容(似乎已解决):

POST https://localhost:44340/api/events 500

被调用函数的标题如下:

public async Task<IEnumerable<CosmosDBEvents>> GetAsync([FromBody]EventsGetTwoParamsDto dto)

DTO 声明如下:

public class EventsGetTwoParamsDto
{
    public string DeviceIdorId { get; set; }
    public string Action2 { get; set; }
}

和 ajax 调用如下:

 $.ajax({
        type:"POST",
        url: ENV.apiUrl+'/events',
        data: JSON.stringify({DeviceIdorId: ENV.deviceId, Action2 : "Pagina5"}),
        dataType: "json",
        contentType: 'application/json;charset=UTF-8',
        success: function(data){
            console.log("RISPOSTA", data);
        }
    });

Startup.cs/ConfigurationServices 方法包含以下行:

 services.AddCors(); // Make sure you call this previous to AddMvc
 services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

和 thr Startup.cs/Configure 方法包含:

   app.UseCors(         
      options=> options.AllowAnyOrigin()
                       .AllowAnyHeader()
                       .AllowAnyMethod()
                       .AllowCredentials());

我究竟做错了什么?

提前致谢。 西蒙娜


所有问题都与第二个解决了更改控制器中方法的声明有关,如下所示:

[HttpPost]
public async 
Task<IEnumerable<CosmosDBTelemetry>>GetAsync(TelemetriesTwoParamsDto dto)

谢谢大家,西蒙娜

你可能把代码放错了地方。

public void ConfigureServices(IServiceCollection services)
{
        services.AddCors(options =>
        {
            options.AddPolicy("AllowAnyOrigin",
                builder => builder
                .AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader());
        });

        // other code           
}

public void Configure(IApplicationBuilder app)
{
    app.UseCors("AllowAnyOrigin");

    // ...
}

您可以尝试将默认策略添加到ConfigureServices方法:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddDefaultPolicy(builder =>
        {
            builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
        });
    }

    // (...)
}

请参阅 ASP.NET Core CORS 文档部分以获取参考。

您还可以尝试将"AllowedHosts": "*"appsettings.json文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM