You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XUnit测试接口返回StatusCode:400 Bad Request,断点无法命中

错误原因
  • 核心问题是请求格式和接口要求的参数绑定格式不匹配:你的接口标记了[FromForm]接收DocumentUploadDto参数,要求请求必须是multipart/form-data格式,但你测试代码中使用StringContent序列化DTO为JSON,请求头设置的是application/json,ASP.NET Core无法完成参数绑定,直接返回400错误,因此不会进入接口方法,断点无法命中。
  • 额外的逻辑问题:IFormFile类型的属性无法被JSON序列化正确处理,即使接口改为接收JSON格式参数,也无法完成文件上传的参数传递。
解决方法

将测试代码中的请求内容替换为MultipartFormDataContent构造表单数据,调整后的测试代码示例如下:

[Fact]
public async Task When_DocumentTypeInvalidFileType_Then_ShouldFail()
{
    using (var client = new HttpClient() { BaseAddress = new Uri(TestSettings.BaseAddress) })
    {
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _authToken);
        var filePath = @"D:\Files\NRIC.pdf";
        using (var stream = File.OpenRead(filePath))
        {
            // 构造multipart/form-data格式的请求内容
            using var content = new MultipartFormDataContent();
            // 添加文件参数,参数名要和DTO的File属性名完全一致
            var fileContent = new StreamContent(stream);
            fileContent.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/pdf");
            content.Add(fileContent, "File", Path.GetFileName(filePath));
            // 添加其他表单字段,参数名要和DTO对应属性名完全一致
            content.Add(new StringContent(ApplicationDocumentType.ICFRONT.ToString()), "DocumentType");
            content.Add(new StringContent(Guid.NewGuid().ToString()), "DraftId");
            
            // 注意:如果你的控制器类没有标记[Route("ABC")]前缀,这里请求路径应该改为"/Document"
            var response = await client.PostAsync("/ABC/Document", content);
            var responseString = await response.Content.ReadAsStringAsync();
            _output.WriteLine("response: {0}", responseString);
        }
    }
}        

调整后如果仍出现400错误,请优先确认控制器的路由前缀配置,保证请求路径和接口实际路由一致。

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:36:06