2013-03-02 13 views
120

Jak można utworzyć przy użyciu C# i HttpClient następujące żądania POST: User-Agent: Fiddler Content-type: application/x-www-form-urlencoded Host: localhost:6740 Content-Length: 6.NET HttpClient. Jak POST wartość ciągu?

muszę taką prośbę do mojego serwisu WWW API:

[ActionName("exist")] 
[System.Web.Mvc.HttpPost] 
public bool CheckIfUserExist([FromBody] string login) 
{   
    bool result = _membershipProvider.CheckIfExist(login); 
    return result; 
} 
+0

Jakiego klienta HTTP używasz w obrazie? – brimstone

+0

http://www.telerik.com/fiddler –

+0

Usługa to Web Api MVC. *** Format JSON *** na życzenie? – Kiquenet

Odpowiedz

328
using System; 
using System.Collections.Generic; 
using System.Net.Http; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Task.Run(() => MainAsync()); 
     Console.ReadLine(); 
    } 

    static async Task MainAsync() 
    { 
     using (var client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri("http://localhost:6740"); 
      var content = new FormUrlEncodedContent(new[] 
      { 
       new KeyValuePair<string, string>("", "login") 
      }); 
      var result = await client.PostAsync("/api/Membership/exists", content); 
      string resultContent = await result.Content.ReadAsStringAsync(); 
      Console.WriteLine(resultContent); 
     } 
    } 
} 
+1

hm, moje HttpClientExtensions nie ma takiego przeciążenia ... Używam framework 4.0 –

+1

Które przeciążenie nie masz? Upewnij się, że zainstalowałeś ['Microsoft.AspNet.WebApi.Client'] (http://nuget.org/packages/Microsoft.AspNet.WebApi.Client/) NuGet do swojego projektu. Klasa 'HttpClient' jest wbudowana w .NET 4.5, a nie w .NET 4.0. Jeśli chcesz go używać w .NET 4.0, potrzebujesz NuGet! –

+1

Pierwsze C# SSSCE, z którym się spotykam. Jakby był taki powiew, żeby go uruchomić, jeśli pochodzisz z języka z właściwym IDE. – Buffalo

29

Poniżej jest przykład zadzwonić synchronicznie, ale można łatwo zmienić do aSYNC za pomocą czekają-Sync:

var pairs = new List<KeyValuePair<string, string>> 
      { 
       new KeyValuePair<string, string>("login", "abc") 
      }; 

var content = new FormUrlEncodedContent(pairs); 

var client = new HttpClient {BaseAddress = new Uri("http://localhost:6740")}; 

    // call sync 
var response = client.PostAsync("/api/membership/exist", content).Result; 
if (response.IsSuccessStatusCode) 
{ 
} 
2

można zrobić coś takiego

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:6740/api/Membership/exist"); 

req.Method = "POST"; 
req.ContentType = "application/x-www-form-urlencoded";   
req.ContentLength = 6; 

StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII); 
streamOut.Write(strRequest); 
streamOut.Close(); 
StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream()); 
string strResponse = streamIn.ReadToEnd(); 
streamIn.Close(); 

A potem strReponse powinna zawierać wartości zwracane przez usługa

+20

Pytanie dotyczyło sposobu użycia nowego 'HttpClient', a nie starego' WebRequest'. –

+0

Prawda, że ​​nie zauważyłem, i tak zostawię pocztę na wypadek, gdyby ktoś potrzebował starego ... – Axel

4

Jest artykuł o swoje pytanie na stronie ASP.NET jest. Mam nadzieję, że ci to pomoże.

Jak wywołać API z ASP NET

http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client

Oto niewielka część z sekcji POST artykułu

Poniższy kod wysyła żądanie POST, która zawiera instancję produktu w Format JSON:

// HTTP POST 
var gizmo = new Product() { Name = "Gizmo", Price = 100, Category = "Widget" }; 
response = await client.PostAsJsonAsync("api/products", gizmo); 
if (response.IsSuccessStatusCode) 
{ 
    // Get the URI of the created resource. 
    Uri gizmoUrl = response.Headers.Location; 
} 
+0

Żądanie jest formułowane przez urncoded, więc nie sądzę, że JSON będzie działał – ChrisFletcher

+0

Jest to * form-urlencoded *. W każdym razie, *** format JSON *** dla właściwości 'DateTime'? problemy z serializacją? – Kiquenet

+0

Nie wydaje mi się, aby zauważyć swoją metodę "PostAsJsonAsync" Nie jest dostępna w mojej instancji HttpClient. –

Powiązane problemy