微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.Net Core 5 Web Api - Swagger POST ok Xunit POST 错误

如何解决.Net Core 5 Web Api - Swagger POST ok Xunit POST 错误

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

Swagger 200 Ok

Swagger Request

测试

[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),ratingDeadLineInit = TimeZoneInfo.ConvertTime(DateTime.UtcNow.AddDays(3),ratingDeadLineEnd = TimeZoneInfo.ConvertTime(DateTime.UtcNow.AddDays(4),closingDate = TimeZoneInfo.ConvertTime(DateTime.UtcNow.AddDays(5),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);
        }

解决方法

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

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

// Act
var response = await _client.PostAsync("/v1/Contest",formDataContent);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。