ASP. NET Core 3.1 - метод PostAsync / PostAsJsonAsyn c в Integration Test всегда возвращает неверный запрос - PullRequest
0 голосов
/ 08 апреля 2020

Это мой метод регистрации внутри AuthController.

[HttpPost(ApiRoutes.Auth.Register)]
public async Task<IActionResult> Register(UserRegistrationRequest request)
{
    var authResponse = await _authService.RegisterAsync(request.Email, request.Password);

    if (!authResponse.Success)
    {
        return BadRequest(new AuthFailedResponse
        {
            Errors = authResponse.Errors
        });
    }

    return Ok(new AuthSuccessResponse
    {
        Token = authResponse.Token,
        RefreshToken = authResponse.RefreshToken
    });
}

Я пытаюсь вызвать этот метод с помощью метода TestClient.PostAsync(), к сожалению, он всегда возвращает неверный запрос. Я уже пытался вызвать метод TestClient.PostAsJsonAsync(ApiRoutes.Auth.Register, user) путем импорта пакета Microsoft.AspNet.WebApi.Client, результат тот же.

var user = new UserRegistrationRequest
    {
        Email = "user1@testtest.com",
        Password = "P@ssw0rd1!!!!!"
    };

var response = await TestClient.PostAsync(
        ApiRoutes.Auth.Register,
        new StringContent(JsonConvert.SerializeObject(user), Encoding.UTF8)
        {
            Headers = { ContentType = new MediaTypeHeaderValue("application/json") }
        });

Error details

1 Ответ

0 голосов
/ 13 апреля 2020

Вам не хватает атрибута FromBody в параметре действия. Когда вы отправляете данные json на контроллер, который будет частью тела запроса. Вы можете сказать контроллеру, как связать поступающие данные, в вашем случае с тела. Таким образом, ваш код должен выглядеть следующим образом:

public async Task<IActionResult> Register([FromBody]UserRegistrationRequest request)
{
    …
}

Подробнее о привязках вы можете прочитать в официальной документации .

...