代码之家  ›  专栏  ›  技术社区  ›  cannelle28

ASP。NET Core 3.1-集成测试中的PostAsync/PostAsJsonAsync方法总是返回错误请求

  •  0
  • cannelle28  · 技术社区  · 4 年前

    这是我在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() 方法,不幸的是,它总是返回Bad Request。我已经试着打电话给 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

    0 回复  |  直到 4 年前
        1
  •  0
  •   gpro    4 年前

    你错过了 FromBody 动作参数中的属性。当您将json数据发送到将成为请求体一部分的控制器时。您可以告诉控制器如何绑定传入的数据,在您的情况下是来自主体的数据。所以你的代码应该看起来像:

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

    您可以在 official documentation .