问题描述
我注意到是否使用该属性是一样的。我错了吗?
举个例子:
[Route("[controller]")]
[ApiController]
public class DataTablesController: ControllerBase
{
[HttpGet]
public IActionResult test()
{
return Ok("test");
}
}
在微软的文档中,我找到了这样的解释:
表示一个类型和所有派生类型用于提供 HTTP API 响应。
使用此属性修饰的控制器配置了旨在改善开发人员构建 API 体验的功能和行为。
在程序集中装饰时,程序集中的所有控制器都将被视为具有 API 行为的控制器。
API 行为是什么?我们为什么要使用它?
解决方法
[ApiController]
属性启用了一些功能,包括属性路由要求、自动模型验证和绑定源参数推断。
这直接取自 MS 文档 Create web APIs with ASP.NET Core:
[ApiController] 属性可以应用于控制器类以 启用以下自以为是的、特定于 API 的行为:
- 属性路由要求
- 自动 HTTP 400 响应
- 绑定源参数推断
- 多部分/表单数据请求推断
- 错误状态代码的问题详细信息
错误的问题详情 状态代码功能需要 2.2 或更高版本的兼容版本。 其他功能需要 2.1 或更高版本的兼容版本。
有关以下功能的一些详细信息:
属性路由
如果您使用 [ApiController]
,则需要属性路由,例如:
[ApiController]
[Route("[controller]")]
public class DataTablesController: ControllerBase
无法通过 Startup.Configure 中的 UseEndpoints、UseMvc 或 UseMvcWithDefaultRoute 定义的常规路由访问操作
自动 Http 400 响应
如果 ModelState
验证失败,添加操作过滤器以返回 400 响应。你不再需要在你的动作中写这个,它会自动处理:
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
绑定源参数推断
同样,来自链接的文档:
绑定源属性定义了动作所在的位置
找到参数的值。以下绑定源属性
存在:[FromBody]
、[FromForm]
、[FromHeader]
、[FromQuery]
、[FromRoute]
、[FromServices]
多部分/表单数据请求推断
[ApiController] 属性在操作时应用推理规则 参数使用 [FromForm] 属性进行注释。这 推断多部分/表单数据请求内容类型。
使用绑定源参数推断的示例:
[HttpPost]
public IActionResult Test([FromForm] Model model)
{
return Ok("test");
}