2017-04-05 206 views
1

我試圖執行一個POST動作MVC控制器,像這樣:當我調試我看到斷點命中後從控制檯應用程序到MVC控制器

[HttpPost] 
public ActionResult TestPost(string value) 
{ 
    var result = value; 
    return Content("hello"); 
} 

 string payload = "hello"; 
     using (var httpClient = new HttpClient()) 
     { 
      var str = new StringContent(new JavaScriptSerializer().Serialize(payload), Encoding.UTF8, 
       "application/json"); 

      httpClient.BaseAddress = new Uri("http://localhost:52653/"); 
      var response = httpClient.PostAsync("Home/TestPost", str).Result; 
     } 

MVC控制器在控制器中,但「值」參數爲空。

這甚至可能嗎?可以以這種方式發送對象嗎?即(人)?

+2

您是否嘗試過剛剛發佈的字符串,而不是'StringContent' ? – maccettura

+0

你不能使用HttpClient.PostAsync(字符串) – BobSwanson

回答

-1

可以使用JsonConvert.SerializeObject()方法。

var str = new StringContent(JsonConvert.SerializeObject(payload).ToString(), Encoding.UTF8,"application/json"); 

序列化JSON字符串看起來像:

{"payload":"hello"} 

而且改變

public ActionResult TestPost(string value) 

TO

public ActionResult TestPost(string payload) 
+1

這爲我工作。謝謝 – BobSwanson

0

嘗試FromBody屬性,應該工作。

由於@maccettura指出的那樣,你必須包括正確的命名空間這個工作

using System.Web.Http; 

[HttpPost] 
public ActionResult TestPost([FromBody]string value) 
{ 
    var result = value; 
    return Content("hello"); 
} 

另一種方法是這樣的:

[HttpPost] 
public async Task<string> TestPost(HttpRequestMessage request) 
{ 
    var requestString = await request.Content.ReadAsStringAsync(); 
    return requestString; 
} 
+0

在mvc中找不到FromBody命名空間 – BobSwanson

+0

你必須使用'using System.Web.Http;' – maccettura

+0

FromBody無法找到 – BobSwanson

相關問題