HttpClient在ASP上的行为不同.净的核心
本文关键字:核心 ASP HttpClient | 更新日期: 2023-09-27 18:09:30
我的问题在于HttpClient
的PostAsync
行动。在我的c#控制台应用程序中使用的代码摘录与在ASP中使用的相同代码完全不同。网络核心。
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脚本,我确实检查了提琴手请求头,唯一的区别是由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 - post最初到达上面提到的JavaScript, redirects
我对搜索内容的调用(这是在从。net控制台应用程序运行代码时发生的事情)。据我所知,HttpClient
的asp.net核心实现在行为上有所不同,因为完全相同的代码(和查询的资源)表现完全不同,因为redirect
从未发生过,因此当我从那篇文章中阅读信息时,上层JS代码结束。
这是我设法解决它的方法。
首先,我声明了一个HttpClientHandler
,其AllowAutoRedirect
属性为true
。
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
的默认行为