如何为 ASP.NET Core 2.2 项目中的子域正确启用 CORS?
Posted
技术标签:
【中文标题】如何为 ASP.NET Core 2.2 项目中的子域正确启用 CORS?【英文标题】:How to correctly enable CORS for a subdomain in an ASP.NET Core 2.2 project? 【发布时间】:2020-03-03 04:54:56 【问题描述】:我正在尝试在同一域的子域上提供我的资产。因此,当我的主域是 https://localhost:44111/
时,资产 URL 将类似于 https://assets.localhost:44111/css/style.css
style.css
文件请求包含自定义字体 my_custom_font.eot
,就像这样
@font-face
....
src: url('/css/fonts/my_custom_font.eot?123');
当我包含位于 assets 子域中的 style.css
文件时,我收到以下错误
跨域请求被阻止:同源策略不允许读取位于https://assets.localhost:44111/css/fonts/my_custom_font.eot?123 的远程资源。 (原因:缺少 CORS 标头“Access-Control-Allow-Origin”)。
为了确保我清楚,style.css
和 my_custom_font.eot
都位于同一域 assets.localhost:44111
。包含style.css
的请求没有问题。但是,当style.css
请求包含my_custom_font.eot
时,该请求被禁止。
我尝试关注documentation 来启用 CORS。我将以下代码添加到Startup.ConfigureServices(IServiceCollection services)
方法中
services.AddCors(options =>
options.AddPolicy("AllowSubDomainTraffic",
builder =>
builder.WithOrigins("https://assets.localhost:44111")
.AllowAnyHeader()
.AllowAnyMethod();
);
);
然后在Startup.Configure(IApplicationBuilder app, IHostingEnvironment env)
方法中我添加了以下内容
app.UseCors("AllowSubDomainTraffic");
但是,我仍然在浏览器的控制台中收到 CORS header ‘Access-Control-Allow-Origin’ missing
错误。
这就是我在我的应用程序中响应子域的方式
app.MapWhen(context =>
return context.Request.Host.Value.StartsWith("assets.", StringComparison.OrdinalIgnoreCase)
(appBuilder) =>
appBuilder.UseStaticFiles(new StaticFileOptions
FileProvider = new PhysicalFileProvider("C:/assets"),
);
);
如何正确启用子域的 CORS?
【问题讨论】:
这有帮助吗:***.com/questions/36877652/… @chakeda 我在方法链中添加了.SetIsOriginAllowedToAllowWildcardSubdomains()
,然后在最后调用了Build()
,这仍然不是同一个问题。文档不建议最后调用Build()
。还有其他想法吗?
【参考方案1】:
WithOrigins(string[]) 接受一个字符串参数(字符串数组,string[])。这使您可以:
builder.WithOrigins("https://localhost:44111", "https://assets.localhost:44111")
.AllowAnyHeader()
.AllowAnyMethod();
注意:不要忘记cors url不能以/
结尾
【讨论】:
以上是关于如何为 ASP.NET Core 2.2 项目中的子域正确启用 CORS?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 ASP.NET Core 注册和使用 MediatR 管道处理程序?
如何为 ASP.NET Core 应用配置 Azure 应用服务日志记录提供程序?
如何将位于应用程序部分 (DLL) 中的部分视图呈现到主 asp.net core 2.2 项目中