完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在AspNetCore 项目中,我们首先使用的类就是Controller,Controller表示MVC中的C,用于协调M(Model)和V(View)。
我们在使用VS创建Web Api或 Web Mvc模板项目时,微软提供了几个Controller,如ControllerBase,Controller 和ApiController,在使用时有必要了解其关系。 |
|
相关推荐
1个回答
|
|
ControllerBase
ControllerBase顾名思义,表示控制器基类,微软在.NetCore 时代统一了Controller类型,无论WebApi项目还是Mvc项目,都以此类作为控制器基类。 NameSpace: Microsoft.AspNetCore.Mvc所属DLL:Microsoft.AspNetCore.Mvc.Core.dll//// Summary:// A base class for an MVC controller without view support.[Controller]public abstract class ControllerBase{ ...}从源码元数据可以看出,ControllerBase是一个标记了ControllerAtribute 的抽象类,不支持view,即表示不能用于带页面控制的MVC项目。 Controller Controller 类是在MVC web中出现的控制器基类,有如下描述。 NameSpace:Microsoft.AspNetCore.MvcDLL:Microsoft.AspNetCore.Mvc.ViewFeatures.dll//// Summary:// A base class for an MVC controller with view support.public abstract class Controller : ControllerBase, IActionFilter, IFilterMetadata, IAsyncActionFilter, IDisposable{ }可以看出Controller 派生自ControllerBase,来自于同一个命名空间,且Controller 类是用于Web MVC项目,丰富了很多的功能,扩展了对视图的支持。 ControllerAttribute ControllerAttribute 是标记在ControllerBase是上面的特性,有如下描述: namespace Microsoft.AspNetCore.Mvc{ // // Summary: // Indicates that the type and any derived types that this attribute is applied // to are considered a controller by the default controller discovery mechanism, // unless Microsoft.AspNetCore.Mvc.NonControllerAttribute is applied to any type // in the hierarchy. [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public class ControllerAttribute : Attribute { public ControllerAttribute(); }}这个特性总体来说用于mvc路由发现和控制器激活机制,可以用于将自定义的class 用作mvc 控制器,比如你如果不想遵循Controller作为类文件后缀的约定,可以很方便的修改。 如下代码中,Bar将用做Controller。 [Controller]public class Endpoint {} [Route("api/[controller]")]public class Bar : Endpoint{ [HttpGet] public string Get() { return "bar"; }}与这个特性相对的是【NonController】,这个特性表示被标记的类不再作为控制器。 namespace Microsoft.AspNetCore.Mvc{ // // Summary: // Indicates that the type and any derived types that this attribute is applied // to is not considered a controller by the default controller discovery mechanism. [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public sealed class NonControllerAttribute : Attribute { public NonControllerAttribute(); }}【NonController】比Controller 有更高的优先级,如果这个特性出现在类层次结构的任何位置,则表示改类和其子类都不再被mvc框架视为控制器。 ApiControllerAttribute 【ApiController】 特性用于webapi项目的控制器上,有如下描述: namespace Microsoft.AspNetCore.Mvc{ // // Summary: // Indicates that a type and all derived types are used to serve HTTP API responses. // The presence of this attribute can be used to target conventions, filters and // other behaviors based on the purpose of the controller. [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public class ApiControllerAttribute : ControllerAttribute, IApiBehaviorMetadata, IFilterMetadata { public ApiControllerAttribute(); }}从元数据描述可以看出,ApiControllerAttribute 派生自ControllerAttribute,这个特性加上之后,为开发Api接口提供了很多便利,比如Action参数的序列化和反序列化,比如模型验证,主要通过IApiBehaviorMetadata 接口实现。 https://github.com/aspnet/AspNetCore/blob/master/src/Mvc/Mvc.Core/src/ApiControllerAttribute.cs |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
“0元购”智元灵犀X1机器人,软硬件全套图纸和代码全公开!资料免费下载!
7607 浏览 2 评论
1432 浏览 0 评论
【实操文档】在智能硬件的大模型语音交互流程中接入RAG知识库
7369 浏览 1 评论
防止AI大模型被黑客病毒入侵控制(原创)聆思大模型AI开发套件评测4
1158 浏览 0 评论
不可错过!人工神经网络算法、PID算法、Python人工智能学习等资料包分享(附源代码)
3463 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-15 03:05 , Processed in 0.844770 second(s), Total 71, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号