【问题标题】:WebApi POST method with string parameter is always null带有字符串参数的 WebApi POST 方法始终为空
【发布时间】:2021-03-20 05:32:44
【问题描述】:

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

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

我尝试使用带有 URL 的 RestClient 访问它:localhost:56934/api/Home/GetOrderDataBySessionId

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

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

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

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

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

【问题讨论】:

  • 如果您需要一个字符串,请将其格式化为正文中的一个。现在您发送的是 json 对象,而不是字符串。
  • 这不是您发送的字符串,它是一个对象,将其用于字符串 "{ \"ListSessionId\": [ \"180416073256DGQR10\", \"180416091511DGQR10\" ] }"跨度>
  • @AdeoluwaSimeon 现在我知道我做错了什么。谢谢,现在可以工作了 :)

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


【解决方案1】:

通过发送此内容:

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

您发送的 JSON 以属性 ListSessionId 表示,类型为字符串数组,因此您的 Web API 操作应该是:

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

只需将string json 更改为List&lt;string&gt; listSessionId

【讨论】:

    【解决方案2】:

    我已经解决了这个问题。

    客户端代码:

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

    服务器中的代码:

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

    有三个关键点:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多