【问题标题】:.Net Core 5 Web Api - Swagger POST ok Xunit POST Error.Net Core 5 Web Api - Swagger POST ok Xunit POST 错误
【发布时间】:2021-09-14 22:03:12
【问题描述】:

我正在使用 XUnit 测试我的 WebApi,GET 请求工作正常。但是当通过 XUnit 测试 POST 时,我收到了 404 Bad Request 而 Swagger 返回 200 OK

测试

[Theory]
        [InlineData("POST")]
        public async Task ContestCreateTest(string method)
        {
            var _httpClient = new Setup().httpClient;

            var request = new HttpRequestMessage(new HttpMethod(method), "/v1/Contest");

            var contestObject = new
            {
                title = "Concurso automatizado",
                description = "Concurso automatizado",
                submissionDeadLineInit = TimeZoneInfo.ConvertTime(DateTime.UtcNow.AddDays(1), TZConvert.GetTimeZoneInfo("America/Sao_Paulo")).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'"),
                submissionDeadLineEnd = TimeZoneInfo.ConvertTime(DateTime.UtcNow.AddDays(2), TZConvert.GetTimeZoneInfo("America/Sao_Paulo")).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'"),
                ratingDeadLineInit = TimeZoneInfo.ConvertTime(DateTime.UtcNow.AddDays(3), TZConvert.GetTimeZoneInfo("America/Sao_Paulo")).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'"),
                ratingDeadLineEnd = TimeZoneInfo.ConvertTime(DateTime.UtcNow.AddDays(4), TZConvert.GetTimeZoneInfo("America/Sao_Paulo")).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'"),
                closingDate = TimeZoneInfo.ConvertTime(DateTime.UtcNow.AddDays(5), TZConvert.GetTimeZoneInfo("America/Sao_Paulo")).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'"),
                useDistritoRules = true,
                rules = ""
            };

            string contestJson = JsonConvert.SerializeObject(contestObject);

            request.Content = new StringContent(contestJson, Encoding.UTF8, "multipart/form-data");

            var response = await _httpClient.SendAsync(request);

            response.EnsureSuccessStatusCode();
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }

【问题讨论】:

    标签: c# .net-core xunit webapi xunit.net


    【解决方案1】:

    如图所示,您的 API 接受表单,但您发送的是 json 格式的数据。

    var formDataContent = new MultipartFormDataContent
    {
        { new StringContent("Concurso automatizado", Encoding.UTF8), "title"},
        { new StringContent("Concurso automatizado", Encoding.UTF8), "description")},
        { new StringContent(TimeZoneInfo.ConvertTime(DateTime.UtcNow.AddDays(1), TZConvert.GetTimeZoneInfo("America/Sao_Paulo")).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'", Encoding.UTF8), "submissionDeadLineInit" },
        ...
    };
    
    // Act
    var response = await _client.PostAsync("/v1/Contest", formDataContent);
    

    【讨论】:

    • 完美,我在另一个论坛上看到了这种解决方案类型,但只是取消上传图片,谢谢你的帮助。所有测试均成功通过!
    猜你喜欢
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    相关资源
    最近更新 更多