传递guid和对象给 Postman 抛出语法错误

ijxebb2r  于 2023-11-18  发布在  Postman
关注(0)|答案(2)|浏览(166)

我的Web API控制器具有以下方法:

[HttpPost]
[Route("updateUser")]
public HttpResponseMessage UpdateUser([FromBody] Guid userId, UserRequest request)

字符串
在Postman中,我试图在body中调用这样的请求,但它抛出了一个语法错误

"27ab0d5a-4330-413c-bce1-21238dce44cb",
{    
  "name": "regex2",
  "city": "sdsdsdssd"
}


如何解决这个问题?

yk9xbfzb

yk9xbfzb1#

你能在一个DTO类中包含GuidUserRequest以及参数吗?这可能会更容易,因为你可以将所有内容合并组合到一个JSON表达式中。然后,你的UpdateUser方法将只接受该DTO类型的一个参数[FromBody]
DTO类看起来像这样:

class UpdateUserDto {
    public Guid userId {get; set;}
    public UserRequest userRequest {get; set;} = new();
}

字符串
您的POST消息的签名将更改为:

[HttpPost]
[Route("updateUser")]
public HttpResponseMessage UpdateUser([FromBody] UpdateUserDto dto)


.你会像这样将序列化的DTO传递给Postman:

{
    "userId": "27ab0d5a-4330-413c-bce1-21238dce44cb",
    "userRequest":
    {
        "name": "regex2",
        "city": "sdsdsdssd"
    }
}

carvr3hs

carvr3hs2#

对于默认WebApi项目中具有[ApiController]属性的控制器,它将绑定请求体中的值,就像[FromBody]属性附加到您的参数一样
此外,请检查相关文件:
不要将[FromBody]应用于每个动作方法的多个参数。一旦请求流被输入格式化程序读取,它就不再可用于再次读取以绑定其他[FromBody]参数。
如果你想分离参数,你可以尝试通过查询部分传递userid,并修改你的控制器:

[HttpPost]
[Route("updateUser")]
public HttpResponseMessage UpdateUser([FromQuery] Guid userId, UserRequest request)

字符串
这里有一个相关的问题,你可以检查详细的原因和另一种解决方案(不推荐)

相关问题