Client.PostAsync (с Json) получает 400 неверных запросов - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь создать интеграционный тест для моего .Net Core Web Api

Но я всегда получаю ответ 400 Bad Request.Я делюсь информацией ниже

Вот мой метод 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 голосов
/ 22 октября 2018

Тест отправляет весь контент в теле запроса, но действие связывает только id.Скорее всего, описание имеет значение null и вызывает проблему с обновлением.

Создайте модель для хранения данных

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

Действие Refactor для получения содержимого из тела запроса

[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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...