aspnetboilerplate - AbpUserConfiguration / GetAll

时间:2017-06-27 15:57:54

标签: angular cors azure-web-sites azure-virtual-machine aspnetboilerplate

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

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

当我从本地工作站运行角度应用程序时,这很有效。仅当我尝试从Azure VM运行角度应用程序时才会出现此问题。

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 个答案:

答案 0 :(得分:1)

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

enter image description here

答案 1 :(得分: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

答案 2 :(得分: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
}

答案 3 :(得分: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 ...

}