[英]Use Cors based on an appSettings in .Net Core
我正在將 .net 4.5.2 項目更新為 .Net 核心 web api。 現在,Cors 根據 appSetting 值CorsAllowAll
設置如下:
if ((ConfigurationManager.AppSettings["CorsAllowAll"] ?? "false") == "true")
{
appBuilder.UseCors(CorsOptions.AllowAll);
}
else
{
ConfigureCors(appBuilder);
}
private void ConfigureCors(IAppBuilder appBuilder)
{
appBuilder.UseCors(new CorsOptions
{
PolicyProvider = new CorsPolicyProvider
{
PolicyResolver = context =>
{
var policy = new CorsPolicy();
policy.Headers.Add("Content-Type");
policy.Headers.Add("Accept");
policy.Headers.Add("Auth-Token");
policy.Methods.Add("GET");
policy.Methods.Add("POST");
policy.Methods.Add("PUT");
policy.Methods.Add("DELETE");
policy.SupportsCredentials = true;
policy.PreflightMaxAge = 1728000;
policy.AllowAnyOrigin = true;
return Task.FromResult(policy);
}
}
});
}
如何在 .net core 中實現相同的目標? 不幸的是,我不會知道每個環境的 URL。 但我知道對於本地、DEV 和 QA 環境,appSetting CorsAllowAll
是正確的。 但是在 UAT 和 PROD 環境中它會是假的。
更新我的 appSettings.json 如下所示:
"AppSettings": {
...
"CorsAllowAll": true
...
}
這個方法效果很好。 WithOrigins接受字符串 [],因此您可以將 appsettings 值拆分為;
或者是其他東西。
appsettings.json
{
"AllowedOrigins": "http://localhost:8080;http://localhost:3000"
}
啟動文件
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ApplicationDbContext dbContext, IOptions<AppSettings> appSettings)
if (!String.IsNullOrEmpty(_appSettings.AllowedOrigins))
{
var origins = _appSettings.AllowedOrigins.Split(";");
app.UseCors(x => x
.WithOrigins(origins)
.AllowAnyMethod()
.AllowCredentials()
.AllowAnyHeader());
}
這種分號格式的主要原因是因為它類似於 Application\\Properties\\launchSettings.json
...
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "api/values",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Application": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api/values",
"applicationUrl": "http://localhost:5000;http://192.168.50.20:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
...
在 ConfigureServices 方法中,定義兩個策略,即CorsAllowAll
和CorsAllowSpecific
services.AddCors(options =>
{
options.AddPolicy("CorsAllowAll",
builder =>
{
builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
});
options.AddPolicy("CorsAllowSpecific",
p => p.WithHeaders("Content-Type","Accept","Auth-Token")
.WithMethods("POST","PUT","DELETE")
.SetPreflightMaxAge(new TimeSpan(1728000))
.AllowAnyOrigin()
.AllowCredentials()
);
});
可以從 Startup.cs 中的IConfiguration
訪問設置CorsAllowAll
值。 根據其值,可以在調用app.UseMvc()
之前在Configure
方法中全局設置定義的策略之一。
//Read value from appsettings
var corsAllowAll = Configuration["AppSettings:CorsAllowAll"] ?? "false";
app.UseCors(corsAllowAll == "true"? "CorsAllowAll" : "CorsAllowSpecific");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.