1

我已将 aspnetboilerplate asp.net 核心应用程序托管为 azure 上的 App 服务和 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 

非常感谢所有回复!

4

4 回答 4

1

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

在此处输入图像描述

于 2017-06-30T06:25:13.453 回答
0

开发目的最简单的选择是使用 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

于 2017-06-27T16:11:33.853 回答
0

您的 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
}
于 2017-06-28T04:44:59.410 回答
0

这就是我们在 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 ...

}
于 2017-06-28T05:22:14.033 回答