当我在 API 项目中创建一个新的 Controller 时,它会生成一个带有 [ApiController] 属性的 Controller 类,如下所示:

[ApiController]
public class TestController : ControllerBase
{
 //implementation
}

我见过一些 webapi 项目,其中省略了此属性的使用。
微软文档 here 说:



但是,我仍然不明白。
有人可以用现实生活中的例子解释这个属性的目的是什么吗?

最佳答案

这在文档中有很好的解释: Annotation with ApiController attribute ,它解释了将 [ApiController] 属性添加到 Controller 执行以下操作:

  • Automatic HTTP 400 responses
    添加一个 Action 过滤器,如果 ModelState.IsValidfalse 则返回 400 响应。
  • Binding source parameter inference
    更改模型绑定(bind)约定。例如,[FromBody] 是为复杂类型参数推断的。
  • Multipart/form-data request inference
    为标有 multipart/form-data 的参数推断 [FromForm] 的 Content-Type 。
  • Attribute routing requirement
    要求所有操作都必须进行属性路由。

  • 您可以在 source 中看到这是如何实际完成的:
    foreach (var actionModel in controllerModel.Actions)
    {
        if (!isApiController && !actionModel.Attributes.OfType<IApiBehaviorMetadata>().Any())
        {
            continue;
        }
    
        EnsureActionIsAttributeRouted(controllerHasSelectorModel, actionModel);
        AddInvalidModelStateFilter(actionModel);
        InferParameterBindingSources(actionModel);
        InferParameterModelPrefixes(actionModel);
        AddMultipartFormDataConsumesAttribute(actionModel);
    }
    
    如果您对上述任何功能不感兴趣,则可以省略该属性。也可以通过配置 ApiBehaviorOptions 类来抑制单个功能。

    关于c# - ApiControllerAttribute 的 AspNet 核心 Web Api 用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53579723/

    10-09 06:43