我有一個Web應用程序,它是幾個不同服務器的網格,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產品應該能夠處理認證,包括傳遞令牌或其他任何東西。微軟ISA是一個與AD等 – ADyson