aspnetboilerplate - AbpUserConfiguration/GetAll 的 CORS 错误

aspnetboilerplate - CORS error for AbpUserConfiguration/GetAll

我在 Azure 上托管了 aspnetboilerplate asp.net 核心应用程序作为应用程序服务,在 Azure VM 上托管了 Angular 应用程序。

当 Angular 应用程序尝试请求 asp.net 核心应用程序时,AbpUserConfiguration/GetAll 发生 CORS 错误。

令人惊讶的是,当我从本地工作站 运行 angular 应用程序时,它运行良好。仅当我尝试从 Azure VM 运行 angular 应用程序时才会出现此问题。

ConfigureServices 函数具有正确的 CORS 和 MVC 序列。还尝试使用特定的 Origin 和 AllowCredentials,但没有成功。

        //Configure CORS for angular2 UI
        services.AddCors(options =>
        {
            options.AddPolicy(DefaultCorsPolicyName, p =>
            {                    
                p.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod();
            });
        });

        //MVC
        services.AddMvc(options =>
        {
            options.Filters.Add(new CorsAuthorizationFilterFactory(DefaultCorsPolicyName));
        });

虽然我们设置了 AllowAnyOrigin 和 AllowAnyMethod 网络请求显示如下

    Access-Control-Request-Headers:abp.tenantid,authorization,content-type
    Access-Control-Request-Method:GET 

非常感谢所有回复!

用于开发目的的最简单选择是使用 chrome 扩展: https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en

理想情况下,另一种选择是允许访问应用程序的 web.config 文件:

https://gist.github.com/Jalalhejazi/5653347

https://enable-cors.org/server_iis7.html

ConfigureServices 中的代码正在注册 CORS 功能并创建自定义策略。您需要在您的应用程序中应用该策略才能使用。如果它打算成为一项全球政策,请在 Startup.cs 配置方法中应用该政策,如下所示

public void Configure(IApplicationBuilder app)
{
    // ...

    // global CORS policy
    app.UseCors(DefaultCorsPolicyName);

    // ...

    // IMPORTANT: Make sure UseCors() is called BEFORE this
    app.UseMvc()
}

或者,如果需要应用到特定的控制器,你可以通过

来实现
[EnableCors(DefaultCorsPolicyName)]
public class SampleController : Controller 
{
  //Controller code
}

这就是我们在 AspnetBoilerplate 中的做法; 您必须在 ConfigureServices 和 Configure 方法中设置 CORS。 ConfigureServices 用于依赖注入设置,Configure 用于指定 ASP.NET 应用程序将如何响应 HTTP 请求。

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    //MVC
    services.AddMvc(options =>
    {
        options.Filters.Add(new CorsAuthorizationFilterFactory(DefaultCorsPolicyName));
    });

    //Configure CORS for angular2 UI
    services.AddCors(options =>
    {
        options.AddPolicy(DefaultCorsPolicyName, builder =>
        {
            //App:CorsOrigins in appsettings.json can contain more than one address with splitted by comma.
            builder
                .WithOrigins(_appConfiguration["App:CorsOrigins"].Split(",", StringSplitOptions.RemoveEmptyEntries).Select(o => o.RemovePostFix("/")).ToArray())
                .AllowAnyHeader()
                .AllowAnyMethod();
        });
    });

    //... other configurations ...

}

您还必须在 Configure 方法中设置 cors。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    //Initializes ABP framework.
    app.UseAbp(options =>
    {
        options.UseAbpRequestLocalization = false; //used below: UseAbpRequestLocalization
    });

    app.UseCors(DefaultCorsPolicyName); //Enable CORS!

    AuthConfigurer.Configure(app, _appConfiguration);

    app.UseStaticFiles();

    app.UseAbpRequestLocalization();

    //... other configurations ...

}

在 Azure 服务器 webapp 上,您还必须启用 CORS。我认为您需要添加 VM 的地址,而不仅仅是客户端站点。