使用值(FromBody)发布时,Web Api字符串参数(fromQuery)始终为null

时间:2018-08-03 21:40:43

标签: asp.net-web-api2 postman

我正在使用Web api 2和.net core 2.0

我正在尝试发布到端点,但是查询中的propertyId始终为空,但是正文中的value已填充。如果我将propertyId更改为int,则会填充它。

大量阅读后,我发现this,对我来说,它“确认”了我所做的应该是可行的。不是,所以我不知道我在想什么。关于这个问题有很多话题,但是没有一个对我有帮助。有人可以告诉我我所缺少的吗?

我尝试了多种变体,包括:

  • 将查询传递为?propertyId = teststring
  • 删除[FromQuery]
  • 移除路线
  • 更改标题
  • 以上组合

    public class RoomsController : ControllerBase
    {
        ...other stuff...
    
    [HttpPost, Route("{propertyId}")]
    public async Task<IActionResult> Post([FromQuery]string propertyId, [FromBody]List<CreateRoomRequestDto> value)
    {
        List<Guid> result = await _mediator.Send(new NewRoomRequest() { PropertyId = propertyId, NewRoom = value });
        return Ok(result);
    }
    }
    

http://localhost:49942/api/Rooms/testString

邮递员脚本

POST /api/Rooms/testString HTTP/1.1
Host: localhost:49942
Cache-Control: no-cache
Content-Type: application/json
Postman-Token: f15b569d-84a2-4bde-bdf0-b1cdf3fff975

[
    {
        "Tag":"30dd879c-ee2f-11db-8314-0800200c9a66",
        "Name":"testName",
        "Description": "tesDescription",
        "Length": 1.5,
        "Width": 1.8,
        "Dimension": 5,
        "DimensionText": "some DimensionText test",
        "PhotoUrls": ["klklkl", "oioioioii"]
    },
    {
        "Tag":"30dd879c-ee2f-11db-8314-0800200c9a66",
        "Name":"testName2",
        "Description": "tesDescription2",
        "Length": 1.2,
        "Width": 1.9,
        "Dimension": 5,
        "DimensionText": "some DimensionText test2",
        "PhotoUrls": ["klklklwewe", "oioioioiinmnmnm"]
    }
]

1 个答案:

答案 0 :(得分:0)

您需要做的就是这样命名[FromQuery]属性

[FromQuery(Name = "propertyId")]

我最近一直在浏览.NET Core路由代码,似乎[FromQuery]有时需要一些帮助,才能知道要映射哪些查询字符串。

编辑:哦,还要取消您的route属性,以便清楚地知道参数的来源。以及让您的请求使用实际的查询字符串,例如

?propertyId=testString而不是使其成为路线上的ID。