[ApiController]属性有什么作用?

c#

我注意到是否使用此属性是一样的。我错了吗?

举个例子:

[Route("[controller]")]
[ApiController]
public class DataTablesController: ControllerBase
{
    [HttpGet]
    public IActionResult Test()
    {
        return Ok("test");
    }
}

当我删除该[ApiController]属性时什么也没发生。

在微软的文档中,我找到了这样的解释:

指示类型和所有派生类型用于提供 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");
}


以上是[ApiController]属性有什么作用?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>