【问题标题】:Post from Console App to MVC Controller从控制台应用程序发布到 MVC 控制器
【发布时间】:2017-04-05 19:06:07
【问题描述】:

我正在尝试对 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");
}

当我调试时,我在控制器中看到断点,但“值”参数为空。

这甚至可能吗?对象也可以这样发送吗?即(人)?

【问题讨论】:

  • 您是否尝试过只发布一个字符串而不是StringContent
  • 你不能使用 HttpClient.PostAsync(string)

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


【解决方案1】:

试试 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;
}

【讨论】:

【解决方案2】:

你可以使用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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    相关资源
    最近更新 更多