簡體   English   中英

HttpClient在ASP.NET Core上的行為有所不同

[英]HttpClient behaving differently on ASP.NET Core

我的問題在於HttpClientPostAsync操作中。 我的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屬性為trueHttpClientHandler

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM