У меня настроен прокси-шлюз для вызова API-сервера со следующим классом DelegatingHandler SendAsyn c, который работает путем вызова с именем сервера HTTP или по IP-адресу HTTP, но возвращает ошибку 404, вызывая субдомен
public class ProxyHandler : DelegatingHandler
{
protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
var pathandquery = request.RequestUri.PathAndQuery;
// APPserver webapi URL
var uri = "http:localhost/api/";
request.RequestUri = uri;
if (request.Method == HttpMethod.Get)
{
request.Content = null;
return base.SendAsync(request, cancellationToken)
.ContinueWith<HttpResponseMessage>(t =>
{
var response = t.Result;
response.Headers.Add("Access-Control-Allow-Origin", "*");
return response;
});
}
else
{
if (request.Method == HttpMethod.Post)
{
return base.SendAsync(request, cancellationToken)
.ContinueWith<HttpResponseMessage>(t =>
{
var response = t.Result;
response.Headers.Add("Access-Control-Allow-Origin", "*");
response.Headers.Add("Access-Control-Allow-Credentials", "true");
response.Headers.Add("Access-Control-Allow-Methods", "POST");
return response;
});
}
if (request.Method == HttpMethod.Put)
{
return base.SendAsync(request, cancellationToken)
.ContinueWith<HttpResponseMessage>(t =>
{
var response = t.Result;
response.Headers.Add("Access-Control-Allow-Origin", "*");
response.Headers.Add("Access-Control-Allow-Credentials", "true");
response.Headers.Add("Access-Control-Allow-Methods", "PUT");
return response;
});
}
}
return base.SendAsync(request, cancellationToken);
}
}
API работает через браузер с https и поддоменом, но возвращает обработчик ошибки 404 через обработчик делегата sendasyn c. запрос выглядит следующим образом:
запрос с именем сервера или I адресом - работает
Method: POST, RequestUri: 'http://<servername>/Account/IsUserFirstLoginStatus', Version: 1.1, Content: System.Web.Http.WebHost.HttpControllerHandler+LazyStreamContent, Headers:
{
Connection: close
Accept: application/json
Accept: text/plain
Accept: */*
Accept-Encoding: gzip
Accept-Encoding: deflate
Accept-Encoding: br
Accept-Language: en-US
Accept-Language: en; q=0.9
Authorization: Bearer
Host: proxyserver.com
Referer: https://frontendsite.com/
User-Agent: Mozilla/5.0
User-Agent: (Windows NT 10.0; WOW64)
User-Agent: AppleWebKit/537.36
User-Agent: (KHTML, like Gecko)
User-Agent: Chrome/80.0.3987.163
User-Agent: Safari/537.36
sec-fetch-dest: empty
deviceinfo: {"userAgent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36","os":"Windows","browser":"Chrome","device":"Unknown","os_version":"windows-10","browser_version":"80.0.3987.163"}
origin: https://frontendsite.com
sec-fetch-site: same-site
sec-fetch-mode: cors
Content-Length: 50
Content-Type: application/json
}
Ответ
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Vary: Origin
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://proxy.com
Server: Kestrel
X-Powered-By: ASP.NET
X-Powered-By: ASP.NET
Date: Sun, 12 Apr 2020 18:24:48 GMT
Connection: close
Content-Length: 64
Content-Type: application/json; charset=utf-8
}
Но ответ 404 ошибка через поддомен (который работает через браузер или почтальон) Запрос
Method: POST, RequestUri: 'https://subdomain.domain.com/Account/IsUserFirstLoginStatus', Version: 1.1, Content: System.Web.Http.WebHost.HttpControllerHandler+LazyStreamContent, Headers:
{
Connection: close
Accept: application/json
Accept: text/plain
Accept: */*
Accept-Encoding: gzip
Accept-Encoding: deflate
Accept-Encoding: br
Accept-Language: en-US
Accept-Language: en; q=0.9
Authorization: Bearer
Host: proxydomain.com
Referer: https://frontenddoamin.com/
User-Agent: Mozilla/5.0
User-Agent: (Windows NT 10.0; WOW64)
User-Agent: AppleWebKit/537.36
User-Agent: (KHTML, like Gecko)
User-Agent: Chrome/80.0.3987.163
User-Agent: Safari/537.36
sec-fetch-dest: empty
deviceinfo: {"userAgent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36","os":"Windows","browser":"Chrome","device":"Unknown","os_version":"windows-10","browser_version":"80.0.3987.163"}
origin: https://frontenddomain.com
sec-fetch-site: same-site
sec-fetch-mode: cors
Content-Length: 50
Content-Type: application/json
}