当我在 API 项目中创建一个新的 Controller 时,它会生成一个带有 [ApiController]
属性的 Controller 类,如下所示:
[ApiController]
public class TestController : ControllerBase
{
//implementation
}
我见过一些 webapi 项目,其中省略了此属性的使用。
微软文档 here 说:
但是,我仍然不明白。
有人可以用现实生活中的例子解释这个属性的目的是什么吗?
最佳答案
这在文档中有很好的解释: Annotation with ApiController attribute ,它解释了将 [ApiController]
属性添加到 Controller 执行以下操作:
添加一个 Action 过滤器,如果
ModelState.IsValid
是 false
则返回 400 响应。更改模型绑定(bind)约定。例如,
[FromBody]
是为复杂类型参数推断的。为标有
multipart/form-data
的参数推断 [FromForm]
的 Content-Type 。要求所有操作都必须进行属性路由。
您可以在 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/