HttpClient在ASP上的行为不同.净的核心

本文关键字:核心 ASP HttpClient | 更新日期: 2023-09-27 18:09:30

我的问题在于HttpClientPostAsync行动。在我的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>

HttpClient在ASP上的行为不同.净的核心

我确实找到了这个问题。我的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的默认行为