異なるサーバーで実行されているWebサービスがいくつかあり、残りの「前」で1つのWebサービスを実行して、ヘッダー値に基づいて要求を転送するWebサービス(サーバー)を決定したいと考えています。
アイデアは、クライアントがリクエストを送信するというものです。
http://api.mysite.com/cars
Mysite.comのAPIはリクエストを検査し、APIキー(ヘッダーで提供されます)から情報を抽出し、適切なサーバーにリダイレクトします。
http://server4.mysite.com/api/cars
これはうまくいくでしょうか? 「server4」からクライアントに応答(データ付き)を返す方法が心配です。応答は最初のサーバーにのみ返されますか、それともクライアントはその応答を達成しますか?
同じタスクに遭遇し、YazanATIの回答に加えてさらにいくつかの行を追加する必要があります。
[HttpPost]
[HttpGet]
[Route("api/TestBot/{*remaining}")]
public Task<HttpResponseMessage> SendMessage()
{
const string Host = "facebook.botframework.com";
string forwardUri = $"https://{Host}/api/v1/bots/billycom{Request.RequestUri.Query}";
Request.Headers.Remove("Host");
Request.RequestUri = new Uri(forwardUri);
if (Request.Method == HttpMethod.Get)
{
Request.Content = null;
}
var client = new HttpClient();
return client.SendAsync(Request, HttpCompletionOption.ResponseHeadersRead);
}
あなたがする必要があるのは、次のようなWeb APIDelegatingHandlerを構築することです。
public class ProxyHandler : DelegatingHandler
{
protected override async System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
UriBuilder forwardUri = new UriBuilder(request.RequestUri);
//strip off the proxy port and replace with an Http port
forwardUri.Port = 80;
//send it on to the requested URL
request.RequestUri = forwardUri.Uri;
HttpClient client = new HttpClient();
var response = await client.SendAsync(request,HttpCompletionOption.ResponseHeadersRead);
return response;
}
}