我在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
非常感谢所有回复!
答案 0 :(得分:1)
答案 1 :(得分:0)
最简单的开发选项是使用chrome扩展: https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en
理想情况下,另一个选项是允许在应用程序的web.config文件中进行访问:
答案 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 ...
}