HttpClient nie obsługuje metody PostAsJsonAsync C#
Próbuję wywołać web API z mojej aplikacji internetowej. Używam. Net 4.5 i podczas pisania kodu dostaję błąd HttpClient
nie zawiera definicji PostAsJsonAsync
metoda.
Poniżej znajduje się kod:
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;
I otrzymuję komunikat o błędzie:
Proszę spojrzeć i doradzić mi.Błąd: 'System. Net. Http. HttpClient' nie zawiera definicji dla 'PostAsJsonAsync' i brak metody rozszerzenia 'PostAsJsonAsync' przyjmującej pierwszy argument Typ 'System.Net.Http.HttpClient' można znaleźć (brakuje dyrektywa czy odniesienie do zespołu?)
13 answers
Tak, musisz dodać odniesienie do
System.Net.Http.Formatting.dll
Można to znaleźć w obszarze extensions assemblies.
Dobrym sposobem osiągnięcia tego jest dodanie pakietu NuGet Microsoft.AspNet.WebApi.Client
do twojego projektu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-01 21:02:57
PostAsJsonAsync
nie jest już w System.Net.Http.dll
(. NET 4.5.2). Możesz dodać odniesienie do System.Net.Http.Formatting.dll
, ale w rzeczywistości należy ono do starszej wersji. Napotkałem na problemy z tym na naszym serwerze TeamCity build, te dwie nie chciały ze sobą współpracować.
Alternatywnie można zastąpić PostAsJsonAsync
wywołaniem PostAsync
, które jest tylko częścią nowej biblioteki dll.
Replace
var response = client.PostAsJsonAsync("api/AgentCollection", user).Result;
Z:
var response = client.PostAsync("api/AgentCollection", new StringContent(
new JavaScriptSerializer().Serialize(user), Encoding.UTF8, "application/json")).Result;
Zauważ, że JavaScriptSerializer
znajduje się w przestrzeni nazw: System.Web.Script.Serialization
.
Będziesz musiał dodać odniesienie do montażu w swoim csproj: System.Web.Extensions.dll
Zobacz https://code.msdn.microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-09 07:19:28
Brakujące odniesienie to System.Net.Http.Formatting.dll
. Ale lepszym rozwiązaniem jest dodanie pakietu NuGet Microsoft.AspNet.WebApi.Client
, aby upewnić się, że wersja biblioteki formatującej działała z wersją System.Net.Http
. NET framework w moim projekcie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-29 17:17:28
Jak już wspomniano, ta metoda nie jest już dostępna od. NET 4.5.2. Aby rozwinąć na odpowiedź Jeroena K możesz wykonać metodę rozszerzenia:
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);
}
Teraz możesz zadzwonić client.PostAsJsonAsync("api/AgentCollection", user)
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:31
Też miałem ten problem w projekcie, który właśnie sprawdziłem z kontroli źródła.
Objawem był opisany powyżej błąd i żółty trójkąt ostrzegawczy na odniesienia do System.Net.Http.Formatting
Aby to naprawić, usunąłem zepsute odniesienie, a następnie użyłem NuGet do zainstalowania najnowszej wersji Microsoft.AspNet.WebApi.Client
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-17 09:29:54
Wiem, że ta odpowiedź jest za późno, miałem ten sam problem i dodałem System.Net.Http.Formatting.Extension
Nuget, po sprawdzeniu tu i tam znalazłem, że Nuget jest dodawany, ale System.Net.Http.Formatting.dll
nie został dodany do referencji, po prostu ponownie zainstalowałem Nuget
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-16 09:56:03
Spróbuj zainstalować w swoim projekcie pakiet NuGet: Microsoft.AspNet.WebApi.Klient:
Install-Package Microsoft.AspNet.WebApi.Client
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-31 18:48:47
Ok, jest apokaliptyczny 2020 teraz, i można znaleźć te metody w pakiecie NuGet System.Net.Http.Json
. Ale uważaj, że używa System.Text.Json
wewnętrznie.
A jeśli naprawdę chcesz dowiedzieć się, które API znajduje się gdzie, po prostu użyj https://apisof.net/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-21 19:17:16
Zamiast pisać taką ilość kodu, aby wykonać proste połączenie, możesz użyć jednego z wrapperów dostępnych przez internet.
Napisałem jeden o nazwie WebApiClient, dostępny w NuGet... zobacz!
Https://www.nuget.org/packages/WebApiRestService.WebApiClient/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-28 09:24:17
Jeśli grasz w Blazor i dostajesz błąd, musisz dodać pakiet Microsoft.AspNetCore.Blazor.HttpClient
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-03 13:26:16
Just expanding Jeroen ' s answer with the tips in comments:
var content = new StringContent(
JsonConvert.SerializeObject(user),
Encoding.UTF8,
MediaTypeNames.Application.Json);
var response = await client.PostAsync("api/AgentCollection", content);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-27 23:54:23
Dla mnie znalazłem rozwiązanie po wielu próbach, które zastępuje
HttpClient
Z
System.Net.Http.HttpClient
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-05 19:22:42
Jeśli używasz już Newtonsoft.JSON spróbuj tego:
// 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"));
Wydajność jest lepsza niż JavaScriptSerializer. Spójrz tutaj https://www.newtonsoft.com/json/help/html/Introduction.htm
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-12 11:14:35