Próbuję wywołać interfejs API sieci Web z mojej aplikacji internetowej. Używam .Net 4.5 i podczas pisania kodu otrzymuję błąd, HttpClient
który nie zawiera PostAsJsonAsync
metody definicji .
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 pojawia się komunikat o błędzie:
Błąd: „System.Net.Http.HttpClient” nie zawiera definicji „PostAsJsonAsync” i nie znaleziono metody rozszerzenia „PostAsJsonAsync” przyjmującej pierwszy argument typu „System.Net.Http.HttpClient” (czy brakuje Ci za pomocą dyrektywy lub odniesienia do zestawu?)
Proszę spojrzeć i doradzić mi.
c#
json
asp.net-web-api
dotnet-httpclient
Jidheesh Rajan
źródło
źródło
Odpowiedzi:
Tak, musisz dodać odniesienie do
Można to znaleźć w obszarze zespołów rozszerzeń.
Dobrym sposobem na osiągnięcie tego jest dodanie pakietu NuGet
Microsoft.AspNet.WebApi.Client
do projektu.źródło
PostAsJsonAsync
nie jest już wSystem.Net.Http.dll
(.NET 4.5.2). Możesz dodać odniesienieSystem.Net.Http.Formatting.dll
, ale tak naprawdę należy ono do starszej wersji. Miałem z tym problemy na naszym serwerze kompilacji TeamCity, te dwa nie współpracowałyby ze sobą.Alternatywnie, można zastąpić
PostAsJsonAsync
zPostAsync
rozmowy, która jest tylko częścią nowego DLL. ZastąpićZ:
Zauważ, że
JavaScriptSerializer
jest w przestrzeni nazw:System.Web.Script.Serialization
.Będziesz musiał dodać odwołanie do zestawu w swoim csproj:
System.Web.Extensions.dll
Zobacz https://code.msdn.microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836
źródło
await FooAsync()
zamiastFooAsync().Result
. Ten ostatni może zostać zakleszczony. Zobacz stackoverflow.com/q/17248680/2272514 i jego zaakceptowaną odpowiedź. Istnieją również dobre linki o szczegółach.Brakującym odniesieniem jest
System.Net.Http.Formatting.dll
. Ale lepszym rozwiązaniem jest dodanie pakietu NuGet,Microsoft.AspNet.WebApi.Client
aby upewnić się, że wersja dll formatowania działa z wersją środowiska .NETSystem.Net.Http
w moim projekcie.źródło
Jak już zostało omówione, ta metoda nie jest już dostępna od .NET 4.5.2. Aby rozwinąć odpowiedź Jeroen K , możesz wykonać metodę rozszerzenia:
Teraz możesz dzwonić
client.PostAsJsonAsync("api/AgentCollection", user)
.źródło
Miałem też ten problem z projektem, 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 w odniesieniu do
System.Net.Http.Formatting
Aby to naprawić, usunąłem uszkodzone odniesienie, a następnie użyłem NuGet do zainstalowania najnowszej wersji
Microsoft.AspNet.WebApi.Client
.źródło
Install-Package Microsoft.AspNet.WebApi.Client
Wiem, że ta odpowiedź jest za późno, miałem ten sam problem i
System.Net.Http.Formatting.Extension
dodawałem Nuget, po sprawdzeniu tutaj i tam znalazłem, że Nuget został dodany, aleSystem.Net.Http.Formatting.dll
nie został dodany do referencji, właśnie ponownie zainstalowałem Nugetźródło
Spróbuj zainstalować w swoim projekcie pakiet NuGet: Microsoft.AspNet.WebApi.Client:
źródło
Zamiast pisać taką ilość kodu, aby wykonać proste połączenie, możesz użyć jednego z opakowań dostępnych w Internecie.
Napisałem jeden o nazwie WebApiClient, dostępny w NuGet ... sprawdź!
https://www.nuget.org/packages/WebApiRestService.WebApiClient/
źródło
Jeśli bawisz się w Blazorze i widzisz błąd, musisz dodać pakiet
Microsoft.AspNetCore.Blazor.HttpClient
.źródło
Po prostu rozszerzam odpowiedź Jeroena o wskazówki w komentarzach:
źródło