2 回答

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊
我認(rèn)為您所需要的只是@Praneet 提到的以下內(nèi)容。創(chuàng)建全訪問策略
services
.AddCors(options => options
.AddPolicy("WideOpen", p => p
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader())
);
您還需要一個(gè)Configure方法來全局啟用它
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors("WideOpen");
}
更新的答案
services
.AddCors(options => options
.AddPolicy("WideOpen", p => p
.SetIsOriginAllowedToAllowWildcardSubdomains()
.WithOrigins("*")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials())
);
根據(jù)允許的來源所需的文件。 SetIsOriginAllowedToAllowWildcardSubdomains所以我已經(jīng)設(shè)置WithOrigins使用通配符
更新的答案 2
好的,我對你的問題有個(gè)想法。我認(rèn)為這不是理想或推薦的解決方案,但它會(huì)起作用。您可以有一個(gè)中間件,它為每個(gè)請求注入響應(yīng)標(biāo)頭,這些請求需要允許 AnyOrigin、AnyMethod 和 AnyHeader 以及憑據(jù)。但是,它只會(huì)Access-Control-Allow-Origin為請求中存在的 Origin 添加標(biāo)頭,因此允許任何來源。
如果 Ajax 檢查不起作用,您可以將其刪除。唯一的缺點(diǎn)是,它將為所有請求注入標(biāo)頭。
public class WideOpenCorsMiddleware
{
private readonly RequestDelegate _next;
public WideOpenCorsMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
var response = context.Response;
// check if it's an ajax request
if (context.Request.Headers != null && context.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
{
response.Headers.Add("Access-Control-Allow-Origin",
new[] { (string)context.Request.Headers["Origin"] });
response.Headers.Add("Access-Control-Allow-Headers",
new[] { "Origin, X-Requested-With, Content-Type, Accept" });
response.Headers.Add("Access-Control-Allow-Methods", new[] { "GET, POST, PUT, DELETE, OPTIONS" });
response.Headers.Add("Access-Control-Allow-Credentials", new[] { "true" });
response.StatusCode = 200;
}
// if not a pre-flight request
if (context.Request.Method != "OPTIONS")
{
await _next(context);
}
}
}
你也可以有這個(gè)擴(kuò)展方法,這樣你就可以很容易地在Configure方法中使用它。
// Extension method used to add the middleware to the HTTP request pipeline.
public static class MiddlewareExtensions
{
public static IApplicationBuilder UseWideOpenCors(this IApplicationBuilder builder)
{
return builder.UseMiddleware<WideOpenCorsMiddleware>();
}
}
最后,在Configure方法中,添加以下行,可能在頂部:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseWideOpenCors();
}

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
在您的 appsettings.json 中添加您的 cors 來源。是這樣的:
"CorsOrigins": {
"Urls": [ "http://localhost:4200", "http://localhost:8090", "https://localhost:44376" ]
}
然后像這樣設(shè)置你的啟動(dòng):
var corsOriginsSection = Configuration.GetSection("CorsOrigins");
var origins = corsOriginsSection.Get<CorsOrigins>();
services.AddCors(options => options.AddPolicy("AllowSpecificOrigin", p => p.WithOrigins(origins.Urls)
.AllowAnyMethod()
.AllowAnyHeader()));
然后在你的控制器上添加這個(gè):
[EnableCors("AllowSpecificOrigin")]
那應(yīng)該有效。
我將使用的類是這樣的:
public interface ICorsOrigins
{
string[] Urls { get; set; }
}
public class CorsOrigins : ICorsOrigins
{
public string[] Urls { get; set; }
}
我會(huì)保留 appsettings 中的起源,否則它將是硬編碼的東西。
就像特定來源一樣,創(chuàng)建一個(gè)策略 All Access 并根據(jù)您的要求使用它
- 2 回答
- 0 關(guān)注
- 156 瀏覽
添加回答
舉報(bào)