有没有一种简单的方法从入站请求创建新的出站HttpWebRequest?

时间:2017-07-26 14:37:34

标签: c# asp.net-mvc httprequest

我需要从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等)相同,只是与其他网址相同。

我一直在玩它,它比我想象的要复杂得多。入站RequestHttpRequestBase,代理请求为HttpWebRequest。它们基本上是不同的类型,两者之间没有直接的转换。到目前为止,复制和翻译属性是一个繁琐的过程。

在我花大量时间调试这一切之前,还有一种更简单的方法吗?有许多不同类型来表示HTTP请求:

  • HttpRequestBase
  • HttpWebRequest
  • HttpRequest
  • HttpRequestWrapper

有没有一种方法我不知道简单地重复使用"更改URL时的入站请求?或者我应该继续HttpRequestBase的翻译吗?

1 个答案:

答案 0 :(得分:0)

是的,有可能。您可以重新使用来自传入请求的请求内容,并通过创建您自己的新请求来转发它。使用转发请求的地址创建一个新客户端。并使用新的HTTP客户端进行获取或发布,然后返回结果。

var client = new HttpClient
{
    BaseAddress = new Uri(destinationBaseAddress)
};

return await client.PostAsync(requestUrl, Request.Content);