我的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();
答案 0 :(得分:0)
我试图更好地理解这一点。您是否只是想将所有转到该地址的请求重定向到另一个地址?鉴于您已将此权限放在委派处理程序中,我想象这是针对每个传入请求运行的。
如果是这样的话,我真的不相信这是写这段代码的地方。我认为还有另外两个地方可以提供更清洁的解决方案。
您似乎正在重新构建反向代理(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)以获取数据以进行操作。