我想做什么 - 我用.net构建一个端点,该方法包含一个名为的类 测试请求。该类包含一组附件。以及一个包含 File 和 FileId 的 Attachment 类。现在我想测试我的端点并使用正文中的表单数据向邮递员发送发布请求。 我在邮递员中的密钥是 Attachments[0].File,然后我选择一个文件。
问题 - 当我将请求发送到创建端点时,我收到一个 400 错误请求,因为“附件字段是必需的。”.. 是的,我知道,我正在尝试:)
**我的目标是什么** - 我的目标是向此 Create 端点发送 HTTP POST 请求,其正文包含一个或多个文件以及映射到 TestRequest 对象的 FileId。
public class Attachment
{
public Guid FileId { get; set; }
public IFormFile File { get; set; }
}
public class TestRequest
{
public ICollection<Attachment> Attachments { get; set; }
}
[Authorize]
[ApiController]
[Route("[controller]")]
public class TestController : ControllerBase
{
[HttpPost]
[ProducesResponseType((int)HttpStatusCode.OK)]
public async Task<ActionResult> Create([FromForm] TestRequest request) {
return Ok("Test");
}
}
当我将请求发送到创建端点时,我收到 400 Bad 请求扔在我脸上,因为“附件字段是 必需的。”.. 是的,我知道,我正在努力:)
根据您共享的代码片段和场景,我尝试重现您的问题,并且根据我的调查,我最终得到了预期的结果。
您尚未分享您正在使用的 .NET 版本。但是,我已经使用
.NET 8
测试了您的场景,并且我保留了相同的控制器代码。
在我的测试中,我想说,首先尝试在没有您的
[Authorize]
的情况下进行测试,以便我们可以缩小问题范围,至少确保 [Authorize]
不会阻止我们。
尝试后,请检查您的program.cs文件是否是其他中间件导致该问题。我为什么这么说,我有另一个项目,我也尝试了你的代码,这导致了问题,因为我有几个其他端点配置,这些配置创建了路由冲突并最终得到 401。
我测试过并得到预期结果的项目有以下progra.cs:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
输出:
注意: 请仔细检查您的中间件顺序并确保现有的不会造成路由冲突。