我正在开发前端有角度的网络核心webapi。当我调试时一切正常,现在我已经在IIS上部署了Web abi,但我无法使其正常工作,它给了我CORS错误:"...No 'Access-Control-Allow-Origin' header is present on the requested resource."
以下是在Web api上启用CORS的代码:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddCors();
...
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseCors(x => x
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
我尝试了在此站点和其他站点中找到的不同解决方案,似乎没有任何作用
我应该在我的角度应用程序中添加某种标题吗? 问题可能出在IIS吗?
答案 0 :(得分:0)
您可能想看看这个。
在您的Startup.cs文件中
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(cfg =>
{
cfg.AddDefaultPolicy(policy =>
{
policy.WithOrigins("list of origins to allow here")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
.SetIsOriginAllowed((_) => true)
.SetIsOriginAllowedToAllowWildcardSubdomains();
});
});
services.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
options.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseCors();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{tag?}");
});
}
请确保在调用MVC之前先调用Cors。
我希望这会有所帮助。
致谢
答案 1 :(得分:0)
我终于设法解决了这个问题: 我在IIS上启用了“基本身份验证”,因为我错误地认为这是正确的选择。
我发现IIS的“基本身份验证”与实现的方式不同(我创建了一个自定义的“ BasicAuthenticationHandler”,可以读取标头并验证用户身份)
问题是,即使启用了“匿名身份验证”,IIS(或我不知道的Angular或Chrome)也不返回错误“ 401未经授权”,这给了我CORS错误(必须禁用所有其他身份验证)