![](/img/trans.png)
[英]HttpClient not supporting PostAsJsonAsync method & dll in C#
[英]HttpClient not supporting PostAsJsonAsync method C#
我正在嘗試從我的 web 應用程序中調用 web API。 我正在使用.Net 4.5,在編寫代碼時出現錯誤HttpClient
不包含定義PostAsJsonAsync
方法。
下面是代碼:
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:51093/");
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
var user = new Users();
user.AgentCode = 100;
user.Remarks = "Test";
user.CollectionDate = System.DateTime.Today;
user.RemittanceDate = System.DateTime.Today;
user.TotalAmount = 1000;
user.OrgBranchID = 101;
var response = client.PostAsJsonAsync("api/AgentCollection", user).Result;
我收到錯誤消息:
錯誤:“System.Net.Http.HttpClient”不包含“PostAsJsonAsync”的定義,並且沒有擴展方法“PostAsJsonAsync”接受“System.Net.Http.HttpClient”類型的第一個參數(您是否缺少使用指令還是程序集引用?)
請看看並給我建議。
是的,您需要添加對
System.Net.Http.Formatting.dll
這可以在擴展程序集區域中找到。
實現此目的的一個好方法是將NuGet 包Microsoft.AspNet.WebApi.Client
添加到您的項目中。
PostAsJsonAsync
不再位於System.Net.Http.dll
(.NET 4.5.2) 中。 您可以添加對System.Net.Http.Formatting.dll
的引用,但這實際上屬於舊版本。 我在我們的 TeamCity 構建服務器上遇到了這個問題,這兩個不會一起合作。
或者,您可以將PostAsJsonAsync
替換為PostAsync
調用,這只是新 dll 的一部分。 代替
var response = client.PostAsJsonAsync("api/AgentCollection", user).Result;
和:
var response = client.PostAsync("api/AgentCollection", new StringContent(
new JavaScriptSerializer().Serialize(user), Encoding.UTF8, "application/json")).Result;
請注意, JavaScriptSerializer
在命名空間中: System.Web.Script.Serialization
。
您必須在您的 csproj 中添加程序集引用: System.Web.Extensions.dll
請參閱https://code.msdn.microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836
缺少的參考是System.Net.Http.Formatting.dll
。 但更好的解決方案是添加 NuGet 包Microsoft.AspNet.WebApi.Client
以確保格式化 dll 的版本與我項目中的System.Net.Http
的 .NET 框架版本一起使用。
正如已經討論過的,這種方法自 .NET 4.5.2 起不再可用。 要擴展Jeroen K 的答案,您可以使用擴展方法:
public static async Task<HttpResponseMessage> PostAsJsonAsync<TModel>(this HttpClient client, string requestUrl, TModel model)
{
var serializer = new JavaScriptSerializer();
var json = serializer.Serialize(model);
var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
return await client.PostAsync(requestUrl, stringContent);
}
現在您可以調用client.PostAsJsonAsync("api/AgentCollection", user)
。
在我剛剛從源代碼管理中簽出的項目中,我也遇到了這個問題。
症狀是上述錯誤和對System.Net.Http.Formatting
的引用的黃色警告三角形
為了解決這個問題,我刪除了損壞的引用,然后使用 NuGet 安裝了最新版本的Microsoft.AspNet.WebApi.Client
。
好的,現在是世界末日 2020,您可以在 NuGet 包System.Net.Http.Json
中找到這些方法。 但請注意,它在內部使用System.Text.Json
。
如果你真的需要找出哪個 API 駐留在哪里,只需使用https://apisof.net/
我知道這個回復為時已晚,我遇到了同樣的問題,我正在添加System.Net.Http.Formatting.Extension
Nuget,在這里和那里檢查后我發現添加了 Nuget 但System.Net.Http.Formatting.dll
沒有添加到引用中,我只是重新安裝了 Nuget
嘗試在您的項目中安裝 NuGet 包:Microsoft.AspNet.WebApi.Client:
Install-Package Microsoft.AspNet.WebApi.Client
如果您已經在使用 Newtonsoft.Json 試試這個:
// Alternative using WebApi.Client 5.2.7
////var response = await Client.PutAsJsonAsync(
//// "api/AgentCollection", user
//// requestListDto)
var response = await Client.PostAsync("api/AgentCollection", new StringContent(
JsonConvert.SerializeObject(user), Encoding.UTF8, "application/json"));
性能優於 JavaScriptSerializer。 看看這里https://www.newtonsoft.com/json/help/html/Introduction.htm
您可以使用互聯網上可用的包裝器之一,而不是編寫這么多的代碼來進行簡單的調用。
我編寫了一個名為 WebApiClient 的程序,可在 NuGet 上找到……看看吧!
https://www.nuget.org/packages/WebApiRestService.WebApiClient/
如果您在 Blazor 中玩耍並遇到錯誤,則需要添加包Microsoft.AspNetCore.Blazor.HttpClient
。
只需使用評論中的提示擴展Jeroen 的答案:
var content = new StringContent(
JsonConvert.SerializeObject(user),
Encoding.UTF8,
MediaTypeNames.Application.Json);
var response = await client.PostAsync("api/AgentCollection", content);
對我來說,經過大量嘗試后,我找到了解決方案
HttpClient
和
System.Net.Http.HttpClient
如果您使用 Blazor 組件並收到此錯誤,則意味着您的組件無法找到 http 客戶端。 在您的 blazor 組件上使用此行。
@inject HttpClient Http
確保您的程序或啟動文件中有這一行
builder.Services.AddScoped(sp =>
new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
根據這里談論使用 Newtonsoft.Json 的答案,我為此創建了一個助手 class:
public class JsonContent : StringContent
{
public JsonContent(object model)
: base(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json")
{
}
}
示例用法:
using (var content = new JsonContent(user))
{
var response = client.PostAsync("api/AgentCollection", content).Result;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.