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 文件:
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 的地址,而不仅仅是客户端站点。
我在 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 文件:
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 的地址,而不仅仅是客户端站点。