gpt4 book ai didi

c# - 读取和编辑 HttpResponseMessage 的内容

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:44 25 4
gpt4 key购买 nike

我有一个 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. 有没有办法替换消息的内容?

最佳答案

我试图更好地理解这一点。您是否只是希望将发送到该地址的所有请求重定向到另一个地址?鉴于您将它放在委托(delegate)处理程序中,我想它会针对每个传入请求运行。

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

在网络服务器中:

您似乎在重新创建反向代理 (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-encoded 数据使用格式化程序。如果您要返回其他任何东西,您需要做更多的工作 ( http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters ) 来取回数据以对其进行操作。

关于c# - 读取和编辑 HttpResponseMessage 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30925165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com