Я думаю, что все, что вам нужно, это как упомянуто @Praneet. Создать политику полного доступа
services
.AddCors(options => options
.AddPolicy("WideOpen", p => p
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader())
);
Вам также понадобится строка в методе Configure
, чтобы включить ее глобально
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors("WideOpen");
}
ОБНОВЛЕННЫЙ ОТВЕТ
services
.AddCors(options => options
.AddPolicy("WideOpen", p => p
.SetIsOriginAllowedToAllowWildcardSubdomains()
.WithOrigins("*")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials())
);
Согласно документации SetIsOriginAllowedToAllowWildcardSubdomains
требуется для разрешенного происхождения. Поэтому я установил WithOrigins
для использования подстановочных знаков
ОБНОВЛЕННЫЙ ОТВЕТ 2
хорошо, у меня есть идея для вашей проблемы. Я не думаю, что это идеальное или рекомендуемое решение, но оно будет работать. У вас может быть промежуточное программное обеспечение, которое внедряет заголовки Response для каждого запроса, которые необходимы для разрешения AnyOrigin, AnyMethod и AnyHeader вместе с учетными данными. Тем не менее, он только добавит заголовок Access-Control-Allow-Origin
для источника, который присутствует в запросе, следовательно, разрешает любое происхождение.
Если проверка Ajax не работает, вы можете удалить ее. Единственным недостатком является то, что он будет вводить заголовки для всех запросов.
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);
}
}
}
Вы также можете использовать этот метод Extension, чтобы вы могли легко использовать его в методе 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();
}