带有字符串参数的WebApi POST方法始终为null

时间:2018-04-25 07:22:59

标签: c# asp.net-mvc rest asp.net-web-api

我的WebApi中有一个POST方法,它以json字符串作为参数。

[HttpPost]  
public HttpResponseMessage GetOrderDataBySessionId([FromBody] string json)

我尝试使用带有URL的RestClient来点击它: localhost:56934 / api / Home / GetOrderDataBySessionId

并在Body中指定以下json字符串:

{
  "ListSessionId": [
    "180416073256DGQR10",
    "180416091511DGQR10"
  ]
}

将正文/内容类型设置为 application / json 。但是当它遇到我的方法时,json字符串参数始终为null。

是因为我需要在参数中使用复杂类型吗?

我们永远不能在字符串中输入吗?

2 个答案:

答案 0 :(得分:2)

发送此内容:

{
  "ListSessionId": [
    "180416073256DGQR10",
    "180416091511DGQR10"
  ]
}

您发送的JSON代表了一个以字符串数组式输入的属性ListSessionId,因此您的Web API操作应为:

public HttpResponseMessage GetOrderDataBySessionId([FromBody] List<string> listSessionId)

只需将string json更改为List<string> listSessionId

答案 1 :(得分:0)

我已经解决了这个问题。

客户端代码:

$.ajax({
            url: "/api",
            type: "post",
            data: "p1=1&p2=2"
        });

服务器中的代码:

[HttpPost]
public string Post([FromForm] string p1, [FromForm] string p2)
{
    return p1+p2;
}

有3个关键点:

  1. 客户端和服务器中的参数名称必须相同。
  2. 在客户端,前面必须有[FromForm]而不是[FromBody] 的参数。
  3. 您甚至可以添加多个参数,但参数名称必须对应。