У меня есть прокси-контроллер, чтобы перенаправить запросы Ajax и передать те же файлы cookie из текущего домена в конечную точку веб-API, но он не работает так, как я ожидал. например куки в «https://www.example.com», URL веб-API «https://api.example.com/xyz/abc/». То, что я пытаюсь сделать, это отправив запрос Ajax дляПрокси-сервер Web API2 не перенаправляет запросы
«https://www.example.com/api/proxy/something»
и надеясь, что он будет перенаправлен на
«https://api.example.com/xyz/abc/something» с теми же настройками (особенно печенье).
Вот контроллер API на веб-сайте:
public class ProxyController : ApiController
{
private string _baseUri = "https://api.example.com/xyz/abc/";
[AcceptVerbs(Http.Get, Http.Head, Http.MkCol, Http.Post, Http.Put)]
public async Task<HttpResponseMessage> Proxy()
{
using (HttpClient http = new HttpClient())
{
string proxyURL = this.Request.RequestUri.AbsolutePath;
int indexOfProxy = proxyURL.IndexOf("proxy/") + 6;
_baseUri = _baseUri + proxyURL.Substring(indexOfProxy, proxyURL.Length - indexOfProxy);
this.Request.RequestUri = new Uri(_baseUri);
//For some reason Ajax request sets Content in the Get requests, because
//of that it was denied complaining about "cannot send a content-body"
if (this.Request.Method == HttpMethod.Get)
{
this.Request.Content = null;
}
return await http.SendAsync(this.Request);
}
}
}
Это не перенаправляет запросы. В ответе запрошенный URL-адрес совпадает с исходным запросом. Хост в заголовке запроса является «www.example.com» вместо «api.example.com», я обманываю эту проблему за последние несколько дней.
Просто подумайте больше о куках и доменах. В вашем примере домен верхнего уровня одинаков, только разные поддомены. Если это так, просто убедитесь, что cookie setter использует междоменные куки. Таким образом, файлы cookie будут автоматически передаваться. Если вы находитесь в разных доменах полностью, я не думаю, что файлы cookie будут работать на вас. – ManOVision
Спасибо ManOVision! Да, cookie настроен для «example.com», и он должен работать. –
Это работает, поскольку оно перенаправляется на api.example.com, но файл cookie для «example.com» не передается автоматически, мне все еще нужно его явно указать? –