2012-11-03 11 views
6

Mam domyślną instancję API mvc web zbudowaną z szablonu Visual Studio 2012. Ma następujące trasy i metodę postu w domyślnym ValuesController - strona MVC jest niezmodyfikowana od początkowego utworzenia innego niż zawartość metody Post. Ponadto używam platformy .NET 4.0, ponieważ zamierzam kierować reklamy na platformę Azure.aplikacja konsolowa Post HttpClient do web api mvc

metoda Rejestracja

public static void Register(HttpConfiguration config) 
{ 
    config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 
} 

i post metoda

// POST api/values 
    public string Post([FromBody]string value) 
    { 
     if (value != null) 
     { 
      return "Post was successful"; 
     } 
     else 
      return "invalid post, value was null"; 
    } 

I stworzył aplikację konsoli, która używa HttpClient symulować wysyłania do serwisu, niestety „wartość” przyjście do Poczty jest zawsze zero. Metoda Post została pomyślnie wykonana po wywołaniu PostAsync w HttpClient.

To nie jest dla mnie jasne, jak mapować mój wniosek taki, że wartość zawiera StringContent jestem przechodzącej w ...

static void Main(string[] args) 
    { 
     string appendUrl = string.Format("api/values"); 
     string totalUrl = "http://localhost:51744/api/values"; 
     HttpClient client = new HttpClient(); 
     client.DefaultRequestHeaders.Add("Accept", "application/xml"); 

     string content = "Here is my input string"; 
     StringContent sContent = new StringContent(content, Encoding.UTF8, "application/xml"); 

     HttpResponseMessage response = null; 
     string resultString = null; 

     client.PostAsync(new Uri(totalUrl), sContent).ContinueWith(responseMessage => 
      { 
       response = responseMessage.Result; 
      }).Wait(); 

     response.Content.ReadAsStringAsync().ContinueWith(stream => 
      { 
       resultString = stream.Result; 
      }).Wait();   
    } 

Jestem nowy w Web API MVC i wykorzystania HttpClient - dowolna pomoc, która wskaże mi właściwy kierunek, zostanie bardzo doceniona.

Odpowiedz

6

Wypróbuj poniższy kod:

class Program { 

    static void Main(string[] args) { 

     HttpClient client = new HttpClient(); 
     var content = new StringContent("=Here is my input string"); 
     content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded"); 
     client.PostAsync("http://localhost:2451/api/values", content) 
      .ContinueWith(task => { 

       var response = task.Result; 
       Console.WriteLine(response.Content.ReadAsStringAsync().Result); 
      }); 

     Console.ReadLine(); 
    } 
} 

Wystarczy popatrzeć na „Wysyłanie typów prostych” sekcji tego blogu: http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1

+1

To było świetne! Dwa brakujące fragmenty z mojego oryginalnego kodu to znak równości (dla typów prostych) i ContentType. Dodanie tych dwóch części rozwiązało problem. – jtoth3

Powiązane problemy