Web API Put - 传递的参数为空

Web API Put - Parameter passed is null

我正在使用 Postman 测试我编写的 PUT Web API 方法,但无论我尝试什么,我传递的强类型参数 (MyModel) 始终为 null。

控制器操作

[Route("api/myapiname/{id}/{name}")]
[HttpPut]
public HttpResponseMessage Put(int id, string name, MyModel mymodel)
{
  *//Do stuff*
}

我的模型Class

public class MyModel
{
    public MyModel() { }

    private Boolean _b;
    public Boolean b { set { _b = value; } get { return _b; } }

    private String _comments;
    public String comments { set { _comments = value; } get { return _comments;              }}
}

URL

http://localhost:37781/api/myapiname/123456/laura

邮递员[=3​​9=]

PUT: URL above

Headers: 
Content-Type: application/json

Body:
{
"MyModel":[{"b": true,"comments": "Comments go here"}]
}

我试过更改此行:

public HttpResponseMessage Put(int id, string name, MyModel mymodel)

public HttpResponseMessage Put(int id, string name, [FromBody]MyModel mymodel)

并将 Postman 上的内容类型更改为 x-www-form-urlencoded,我还尝试更改传递给的内容: =[{"b":真,"comments":"Comments go here"}]

我已经尝试了 Whosebug 上提供的各种解决方案,但没有任何效果,有人可以帮助我吗?

您的 Postman 请求在正文中显示一个带有数组 属性 的对象,或者当操作需要单个 MyModel 对象时显示请求。

这是与您的示例操作相匹配的请求的原始片段:

PUT /api/myapiname/123456/laura HTTP/1.1
Host: http://localhost:37781
Content-Type: application/json
... 
Content-Length: 42

{"b": true,"comments": "Comments go here"}

此操作:

[Route("api/myapiname/{id}/{name}")]
[HttpPut]
public HttpResponseMessage Put(int id, string name, MyModel mymodel){...}

应该可以满足上述要求。

:

To force Web API to read a simple type from the request body, add the [FromBody] attribute to the parameter.

邮递员请求中的 Json 将解析为这样的对象...

public class MyObject {
    public MyModel[] MyModel {get; set;}
}

所以您要么需要更改您的请求以匹配您定义的操作,要么更改您的操作以匹配请求

[Route("api/myapiname/{id}/{name}")]
[HttpPut]
public HttpResponseMessage Put(int id, string name, MyObject mymodel){...}