2012-11-03 48 views
6

我有一个默认的mvc web api实例,它是从Visual Studio 2012模板构建的。它在默认的ValuesController中具有以下路由和post方法 - 除了Post方法的内容之外,MVC网站未经初始创建修改。另外,我正在使用.NET Framework 4.0,因为我打算针对Azure。控制台应用程序HttpClient发布到mvc web api

注册方法

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

和Post方法

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

我创建了使用HttpClient的模拟发布到服务控制台应用程序,但不幸的是,“价值”进来的帖子是始终为空。 Post方法在HttpClient上的PostAsync调用之后被成功命中。

这不是我清楚如何映射我的要求,使得值包含我传入的StringContent ...

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();   
    } 

我是新来的MVC的Web API和使用的HttpClient - 任何帮助指引我在正确的方向将不胜感激。

回答

6

试试下面的代码:

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(); 
    } 
} 

看一看在“发送简单的类型”这篇博客的部分:http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1

+1

这是伟大的!我的原始代码中的两个缺失部分是等号(对于简单类型)和ContentType。添加这两个部分解决了问题。 – jtoth3

相关问题