[英]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.