ASP.NET Core 3.1 - PostAsync/PostAsJsonAsync方法在集成测试中始终返回Bad Request。

19 浏览
0 Comments

ASP.NET Core 3.1 - PostAsync/PostAsJsonAsync方法在集成测试中始终返回Bad Request。

这是我在AuthController中的register方法。

[HttpPost(ApiRoutes.Auth.Register)]
public async Task 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。我已经尝试通过导入Microsoft.AspNet.WebApi.Client包来调用TestClient.PostAsJsonAsync(ApiRoutes.Auth.Register, user)方法,结果是一样的。

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
0 Comments

问题出现的原因是在动作参数中缺少[FromBody]属性。当向控制器发送JSON数据作为请求体时,可以告诉控制器如何绑定传入的数据,就像上面的代码所示。解决方法是在动作参数前加上[FromBody]属性。

你可以在[官方文档](https://learn.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-3.1#frombody-attribute)中了解更多关于绑定的内容。

0