我需要從C#代碼中實現一種反向代理。 (是的,我知道,IIS有一個反向代理,但有幾個原因,我需要從代碼做到這一點。)有沒有簡單的方法從入站請求創建新的出站HttpWebRequest?
所以,我的控制器行動將「接力」到另一個URL入站請求,然後返回響應。的種類是這樣的:
public string Proxy()
{
// This would be an extension method; it's currently hypothetical
var newRequest = Request.GetRequestToNewUrl("http://newurl.com");
// Make the request and send back whatever we get
var response = newRequest.GetResponse();
using (var reader = new StreamReader(response.GetResponseStream(), Encoding.Something))
{
return reader.ReadToEnd();
}
}
的代理請求(至newurl.com
)應該是相同的,以將入站請求(標題,主體,餅乾等),只是不同的URL。
我一直在玩它,它比我想象的更復雜。入站Request
是HttpRequestBase
,代理請求將是HttpWebRequest
。它們是根本不同的類型,兩者之間沒有直接的轉換。到目前爲止,複製和翻譯屬性是一個乏味的過程。
在我花費大量時間調試所有這些之前,有沒有更簡單的方法?有相當數量的不同類型來表示一個HTTP請求:
HttpRequestBase
HttpWebRequest
HttpRequest
HttpRequestWrapper
有沒有一種方法,我不知道到只需「重新使用」入站請求,同時更改URL?或者我應該繼續從我的翻譯HttpRequestBase
?
這是否複製了所有HTTP標頭? – Deane
是的,它裏面有一個Headers屬性Request.Content.Headers – Shahzad