[英]HttpClient behaving differently on ASP.NET Core
我的问题在于HttpClient
的PostAsync
操作中。 我的C#控制台应用程序中使用的代码摘录的行为与ASP.NET Core中使用的相同代码的行为完全不同。
using (var httpClient = new HttpClient())
{
var parameters = new Dictionary<string, string> { { "various", "params" } };
var encodedContent = new FormUrlEncodedContent(parameters);
var response = await httpClient.PostAsync(url, encodedContent).ConfigureAwait(false);
if (response.StatusCode == HttpStatusCode.OK)
{
var responseContent = await response.Content.ReadAsStringAsync ().ConfigureAwait (false);
return responseContent;
}
}
调用方法(GetData包含上面的代码):
var unprocessedString = GetData("http://www.whatever.com/info.html").Result;
在unprocessedString
我最终得到一个有效的html字符串
我的ASP .NET Core中使用的代码完全相同,返回的结果完全不同。
返回的信息看起来像一个巨大的JS脚本,我检查了提琴手请求标头,唯一的区别是Accept-Encoding: gzip, deflate
由ASP调用创建的Accept-Encoding: gzip, deflate
标头,我确实删除了它,结果保持不变。
<html><head><meta http-equiv="Pragma" content="no-cache"/>
<script>
a huge javascript function
<noscript>Please enable JavaScript to view the page content.</noscript>
我确实设法找到了问题。 我的http帖子最初到达上面提到的JavaScript,它将我的调用redirects
到所需的内容(这是从.NET控制台应用程序运行代码时发生的情况)。 据我所见, HttpClient
的ASP .NET Core实现的行为有所不同,因为完全相同的代码(和查询的资源)的行为完全不同,因为redirect
从未发生,因此,当我从中读取信息时,上层JS代码结束了该职位。
这就是我设法解决的方法。
首先,我声明了一个AllowAutoRedirect
属性为true
的HttpClientHandler
。
HttpClientHandler httpClientHandler = new HttpClientHandler { AllowAutoRedirect = true };
然后我只是将此对象添加到HttpClient
的构造函数中
HttpClient = new HttpClient(httpClientHandler);
编辑1
我确实设法看到System.Net.Http
版本中的差异。 在控制台应用程序中,我有4.0.0.0
。在.NET Core中,我有4.1.1.1
后者可能没有默认行为4.0.0.0
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.