私はいくつかの異なるサーバーのメッシュで、1つのサーバーがフロントエンドサーバーで、すべての外部からの要求を要求するフロントエンドサーバーです。c#mvc別のサーバーへのリルートリクエスト
これらの要求のいくつかは、別のサーバーに渡す必要があります。理想的には、変更したいのは、これらの要求のホストとUriフィールドだけです。着信要求全体を新しい発信要求にマップし、いくつかのフィールドを変更する方法はありますか?
// some controller
public HttpResponseMessage get()
{
return this.Request.Rewrite("192.168.10.13/api/action");
}
//extension method Rewrite
public static HttpResponseMessage Rewrite(this HttpRequestMessage requestIn, string Uri) {
HttpClient httpClient = new HttpClient(new HttpClientHandler());
HttpRequestMessage requestOut = new HttpRequestMessage(requestIn.Method, Uri);
requestOut.Content = requestIn.Content;
var headerCollection = requestIn.Headers.ToDictionary(x => x.Key, y => y.Value);
foreach (var i in headerCollection)
{
requestOut.Headers.Add(i.Key, i.Value);
}
return httpClient.SendAsync(requestOut).Result;
}
私が午前問題は、これが問題の全体のスルーを持っていることである。
私はこのような何かを試してみました。リクエストがContent
の場合は設定しないでください。後で触れてはならないホストのようなものもコピーするので、ヘッダーは間違っています。
これほど簡単な方法がありますか?
ロードバランシングソフトウェアが必要です。この種のことをコードで自分でやろうとは勧めません。棚のパッケージから外す方がはるかに良いです。 @ Liamはそれをすることができません。 – Liam
これは単純化されたユースケースです。現実の世界では裏で認証があります。 –
ロードバランサまたはリバースプロキシそれはかなり標準的なセットアップであり、ほとんどのCOTS製品は、トークンを渡すなど、認証に対処できなければなりません。 Microsoft ISAは1つで、ADなどとうまく統合されています。 – ADyson