Client.PostAsync(与Json)获得400错误请求

时间:2018-10-21 20:53:27

标签: c# asp.net-core

我正在尝试为.Net Core Web Api创建集成测试

但是我总是收到400错误的请求响应。我在下面分享详情

这是我的Controller方法

public IActionResult UpdateProductById([FromBody]int id, string description)
{
    var result = ProductService.UpdateProductById(id, description);
    if (result.Exception == null)
        return Ok(result);
    else
        return BadRequest(result.Exception.Message);
}

这是我的测试课程(尝试发布)

[Fact]
public async Task UpdateProductById_Test_WithProduct()
{
    var product = new
    {
        id = 1,
        description = "foo"
    };

    var productObj= JsonConvert.SerializeObject(product);

    var buffer = System.Text.Encoding.UTF8.GetBytes(productObj);
    var byteContent = new ByteArrayContent(buffer);

    byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

    var result = await _tester.Client.PostAsync("/api/1.0/UpdateProductById", byteContent);

    result.StatusCode.Should().Be(HttpStatusCode.OK);
}

1 个答案:

答案 0 :(得分:2)

测试正在发送请求正文中的所有内容,但该操作仅绑定id。该说明很可能为空,并导致更新出现问题。

创建一个模型来保存数据

public class ProductModel {
    public int id { get; set; } 
    public string description { get; set; }
}

重构操作以从请求的正文中获取内容

[HttpPost]
public IActionResult UpdateProductById([FromBody]ProductModel model) {
    if(ModelState.IsValid) {
        var result = ProductService.UpdateProductById(model.id, model.description);
        if (result.Exception == null)
            return Ok(result);
        else
            return BadRequest(result.Exception.Message);
    }
    return BadRequest(ModelState);
}