从Console App发布到MVC Controller

时间:2017-04-05 19:06:08

标签: c# asp.net json asp.net-mvc

我尝试对MVC控制器执行POST操作,如下所示:

        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控制器:

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

当我调试时,我看到控制器中的断点命中但是"值" param是null。

这甚至可能吗?可以用这种方式发送对象吗?即(人)?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:-1)

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

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

序列化的JSON字符串如下所示:

{"payload":"hello"}

同时更改

public ActionResult TestPost(string value)

public ActionResult TestPost(string payload)