【发布时间】:2019-04-02 12:05:14
【问题描述】:
在我的应用程序上设置正确的 Cors 设置时遇到了一些问题。
NetCore 应用程序与 Angular6 托管在 IIS 上,angular 应用程序位于 .Net 项目之外,并在发布时编译并插入到 wwwroot 内。
现在的问题是,当我编写angular 部分时,我想直接调用发布服务器来测试一些功能。
我尝试了任何一种方法来解决这个问题,但似乎我总是遇到 Cors 设置的问题,但仅适用于 POST 调用,GET 工作正常。所以这是我的启动代码:
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ILoggerManager, LoggerManager>();
services.AddSingleton<IDbContext, MongoDbContext>();
services.AddSingleton<IIdGenerator, IdGenerator>();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
c.AddSecurityDefinition("Bearer", new ApiKeyScheme(){In = "header",Description = "Please enter JWT with Bearer into field", Name = "Authorization", Type = "apiKey"});
c.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>>
{
{"Bearer", Enumerable.Empty<string>()}
});
});
services.AddCustomRepositories();
services.AddCustomServices();
services.AddJwtService();
//Add cors
services.AddCors();
// Add framework services.
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.Configure<IISOptions>(options =>
{
options.ForwardClientCertificate = false;
});
services.Configure<Settings>(Configuration.GetSection("SystemSettings"));
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//app.UseCors("AllowSpecificOrigin");
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseCors(builder => builder
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod());
app.UseDefaultFiles();
// this will serve js, css, images etc.
app.UseStaticFiles();
app.Use(async (context, next) =>
{
if (context.Request.Path.HasValue &&
!context.Request.Path.Value.StartsWith("/api/") &&
!context.Request.Path.Value.StartsWith("/swagger"))
{
context.Response.ContentType = "text/html";
await context.Response.SendFileAsync(
env.ContentRootFileProvider.GetFileInfo("wwwroot/index.html")
);
return;
}
await next();
});
//app.UseHttpsRedirection();
app.UseSwagger();
app.UseAuthentication();
app.UseMiddleware(typeof(ErrorHandlingMiddleware));
app.UseMvc();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
c.DocExpansion(DocExpansion.None);
});
}
由于我希望仅出于开发目的启用此功能,因此我想在全球范围内启用它。
【问题讨论】:
-
@KirkLarkin 无法加载 xxx:8080/api/users:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'localhost:4200' 不允许访问。响应的 HTTP 状态代码为 500。
-
好的,很好 - 这正是我所期待的。请注意最后一行:响应具有 HTTP 状态代码 500。这意味着您的服务器正在抛出异常,而 那 是您应该查看的内容。
-
我以为 500 是针对 Cors 问题的...
-
不,不正常。检查您的调试器、日志记录等,以查看在您的 ASP.NET Core 项目中引发异常的位置。在当前版本的 ASP.NET Core 中,发生错误时不会设置 CORS 标头。
-
似乎我在程序中没有记录某种异常,我现在正在尝试调试它,但我认为这可能是现在的问题
标签: c# angular asp.net-core cors