У меня есть проект .net core webapi, настроенный на прием перекрестных запросов, например
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseCors(opts => opts
.WithOrigins("https://fiddle.jshell.net")
.AllowCredentials()
.AllowAnyMethod()
.AllowAnyHeader());
app.UseHttpsRedirection();
app.UseMvc();
}
У него есть контроллер значений с методом GET, например,
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return Ok("cookies: " + string.Join(", ", HttpContext.Request.Cookies.Select(x => x.Key)));
}
}
Теперь я пытаюсь отправить запрос на выборку из браузера, вот так
fetch('https://api.domain.com/api/values', {
headers:
{
'Content-Type': 'application/json'
},
credentials: 'include',
mode: 'cors'
})
.then(function(resp){
resp.text().then(function(data) {
console.log(data);
})
})
.catch(function(err){
console.log(err)
});
Но это не отправляет куки со страницы в API. Что мне здесь не хватает? Я испробовал все решения, которые смог найти, включая отключение сторонних файлов cookie
Обновление
Итак, у меня до сих пор нет ответа на вопрос, почему это не работает, или каких-либо авторитетных источников, в которых говорится, что вы не можете отправлять файлы cookie в междоменный домен (или даже в тот, который говорит о перекрестном происхождении! = Междоменный).
Мы обнаружили, что даже куки с sub-a.domian.com
не будут отправляться на sub-b.domain.com
. Способ, которым мы «решили» это создать файл cookie, который постоянно привязан к domain.com
, потому что эти файлы cookie отправляются на sub-a.domain.com
и sub-b.domain.com
.