我需要从C#代码中实现一种反向代理。 (是的,我知道IIS有一个反向代理,但由于多种原因,我需要从代码中执行此操作。)
所以,我的控制器动作将"继电器"对另一个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
)应与入站请求(标题,正文,Cookie等)相同,只是与其他网址相同。
我一直在玩它,它比我想象的要复杂得多。入站Request
为HttpRequestBase
,代理请求为HttpWebRequest
。它们基本上是不同的类型,两者之间没有直接的转换。到目前为止,复制和翻译属性是一个繁琐的过程。
在我花大量时间调试这一切之前,还有一种更简单的方法吗?有许多不同类型来表示HTTP请求:
HttpRequestBase
HttpWebRequest
HttpRequest
HttpRequestWrapper
有没有一种方法我不知道简单地重复使用"更改URL时的入站请求?或者我应该继续HttpRequestBase
的翻译吗?
答案 0 :(得分:0)
var client = new HttpClient
{
BaseAddress = new Uri(destinationBaseAddress)
};
return await client.PostAsync(requestUrl, Request.Content);