ASP.NET Core中的Controller使用示例
ASP.NET CORE出现之前我们实现的Controller,MVC都继承自Controller基类,WebApi的话继承自ApiController。现在ASP.NET CORE把MVC跟WebApi合并了,已经不再区分MVC或者WebApi。ASP.NET CORE的Controller继承结构也发生了变化。我们看其他示例的时候会发现有些继承自Controller有些继承自ControllerBase。事实上ControllerBase是Controller的基类。也就是说如果你继承自Controller,其实就是继承了ControllerBase。那什么时候该选择直接继承ControllerBase呢?
ControllerBase
我们先看看ControllerBase的元数据
很长并没有截全。可以看到ControllerBase是个抽象类,并且实现了大量的虚方法。这些虚方法大都是对应了Http的状态码。
比如
public virtual OkResult Ok(); //http status 200 public virtual NotFoundResult NotFound(); //http status 404 public virtual ForbidResult Forbid(); //http status 403 public virtual CreatedResult Created(Uri uri, [ActionResultObjectValue] object value); // http status 201 ...还有很多很多...
显然这是为Restful Api设计的基类,所以当你要设计一个Restful(web api)接口的时候可以选择继承自ControllerBase,它已经可以满足你的需求。
Controller
查看下Controller的元数据
Controller也是一个抽象类,继承自ControllerBase,并且继承了几个接口。很明显Controller比ControllerBase多的内容主要是一些跟MVC打交道的东西。
比如Viewbag、Viewdata属性,Json、View方法等
public dynamic ViewBag { get; } public ViewDataDictionary ViewData { get; set; } public virtual JsonResult Json(object data); public virtual ViewResult View(); ...
所以如果你是需要实现一个MVC系统,想要使用cshtml模板跟razor试图引擎渲染页面则需要继承Controller。
POCO Controller
除了继承Controller、ControllerBase之外,ASP.NET CORE框架可以让你的POCO类直接变成Controller。
使用“Controller”后缀
狼蚁网站SEO优化的代码,TestController可以正常工作吗?
[Route("api/[controller]")] public class TestController { [HttpGet] public string Get() { return "TestController"; } }
运行一下
虽然TestController类并没有继承自任何类,他确实可以在ASP.NET CORE框架内正常工作。ASP.NET CORE框架默认会查找后缀为“Controller”的类,并把它当做真正的Controller使用,在路由系统最终匹配Controller的时候它也会被尝试匹配。
使用ControllerAttribute
如果你的控制器类有什么特别需求,连类名都不想加入“Controller”的后缀,那么还有一种方法就是使用ControllerAttribute。
[Controller] [Route("api/[controller]")] public class POCO { [HttpGet] public string Get() { return "POCOController"; } }
运行一下
POCO类并没有继承自任何类,并且也没有“Controller”后缀命名,因为它被标记了ControllerAttribute同样会被ASP.NET CORE框架认为是一个Controller。在路由系统最终匹配Controller的时候它也会被尝试匹配。
使用NonControllerAttribute
如果你的一个类名恰巧包含“Controller”的后缀,但你并不想ASP.NET CORE框架发现它,你可以在类上加上NonControllerAttribute。这样ASP.NET CORE框架就会忽略它。
改一下刚才的TestController,加上[NonController]
[NonController] [Route("api/[controller]")] public class TestController { [HttpGet] public string Get() { return "TestController"; } }
运行一下
/api/test已经匹配不到controller了。
- 设计restful(web api)接口的时候可以继承ControllerBase
- 设计MVC系统的时候可以继承Controller
- 当一个POCO类名称包含"Controller"后缀或添加ControllerAttribute的时候框架会认为这是一个控制器
- 当一个类不想被框架当做控制器的时候可以添加NonControllerAttribute
到此这篇关于ASP.NET Core中的Controller使用示例的文章就介绍到这了,更多相关ASP.NET Core Controller内容请搜索狼蚁SEO以前的文章或继续浏览狼蚁网站SEO优化的相关文章希望大家以后多多支持狼蚁SEO!
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程