Jac*_*row 2 c# asp.net-core asp.net-core-webapi
当我在API项目中创建一个新控制器时,它会生成一个带有[ApiController]属性的控制器类,如下所示:
[ApiController]
public class TestController : ControllerBase
{
//implementation
}
Run Code Online (Sandbox Code Playgroud)
我已经看到了一些webapi项目,其中省略了该属性的使用.这里的 Microsoft文档说:
指示类型和所有派生类型用于提供HTTP API响应.此属性的存在可用于根据控制器的目的来定位约定,过滤器和其他行为.
但是,我仍然不明白.有人可以通过现实生活中的例子来解释这个属性的目的是什么?
这在文档:ApiController属性注释中得到了很好的解释,该属性解释了将[ApiController]属性添加到控制器会执行以下操作:
添加一个动作过滤器,如果ModelState.IsValid是,则返回400响应false.
更改模型绑定约定.例如,[FromBody]推断出复杂类型参数.
推断multipart/form-data标记为的参数的Content-Type [FromForm].
要求必须对所有操作进行属性路由.
您可以在源代码中看到这是如何实际完成的:
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);
}
Run Code Online (Sandbox Code Playgroud)
如果您对上述任何功能不感兴趣,可以省略该属性.也可以通过配置ApiBehaviorOptions类来抑制单个功能.
| 归档时间: |
|
| 查看次数: |
361 次 |
| 最近记录: |