阅读并编辑HttpResponseMessage的内容

时间:2015-06-18 20:25:10

标签: c# .net asp.net-web-api asp.net-web-api2

我的DelegatingHandler实施基本上接受请求并将其发送到另一台服务器(http://localhost:9999/test/page.php - > http://otherSite.com/test/page.php)。

在我的问题here之后,我现在必须阅读页面的结果并进行一些编辑:

protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
    string url = request.RequestUri.PathAndQuery;
    UriBuilder forwardUri = new UriBuilder(_otherWebSiteBase);
    forwardUri.Path = url;

    HttpRequestMessage newRequest = request.Clone(forwardUri.Uri.ToString());

    HttpResponseMessage responseMessage = await _client.SendAsync(newRequest);
    //HERE: How to read the responseMessage.Content in string?
    return responseMessage;
}

我试图阅读邮件的内容,更改邮件的某些部分(基本上将所有http://otherSite.com更改为http://localhost:9999)然后将其返回。

我面临的问题:

string content =await responseMessage.Content.ReadAsStringAsync();
  1. 不会给我任何可以改编的东西(我不确定,但我的印象可能是因为压缩?)
  2. 有没有办法替换邮件的内容?

1 个答案:

答案 0 :(得分:0)

我试图更好地理解这一点。您是否只是想将所有转到该地址的请求重定向到另一个地址?鉴于您已将此权限放在委派处理程序中,我想象这是针对每个传入请求运行的。

如果是这样的话,我真的不相信这是写这段代码的地方。我认为还有另外两个地方可以提供更清洁的解决方案。

在Web服务器中:

您似乎正在重新构建反向代理(https://en.wikipedia.org/wiki/Reverse_proxy)的想法,您希望一台服务器只是将请求定向到另一台服务器,而客户端不知道更改。您可以在服务器上进行此修改。如果您正在使用IIS,则可以使用IIS插件(如应用程序请求路由)来实现此目的(http://www.iis.net/learn/extensions/url-rewrite-module/reverse-proxy-with-url-rewrite-v2-and-application-request-routing)。其他网络服务器也有自己的解决方案,但我没有亲自尝试过。

在路线本身

在响应此请求的任何Web API路由上,您可以使用http状态代码告诉浏览器将请求重定向到其他位置。

3xx系列专门用于解决此类问题:http://www.restapitutorial.com/httpstatuscodes.html

也就是说,如果您仍想在原始问题中使用该方法,则需要确保存在正在返回的数据类型的Media-Type Formatter。默认情况下,Web API仅尝试将格式化程序用于JSON,XML和Form-url编码的数据。如果您要返回任何其他内容,则需要再做一些工作(http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters)以获取数据以进行操作。