系列目录

1、Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行。

2、Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World。

3、Taurus.MVC WebAPI 入门开发教程3:路由类型和路由映射。

4、Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义、获取及基础校验属性【Require】。

5、Taurus.MVC WebAPI 入门开发教程5:控制器安全校验属性【HttpGet、HttpPost】【Ack】【Token】【MicroService】。

6、Taurus.MVC WebAPI 入门开发教程6:全局控制器DefaultController与全局事件。

7、Taurus.MVC WebAPI 入门开发教程7:业务逻辑基类LogicBase的使用。

8、Taurus.MVC WebAPI 入门开发教程8:WebAPI文档与自动化测试。

后续还有两个系列:

  1. 1Taurus.MVC 微服务 入门开发教程系列。
  2.  
  3. 2Taurus.MVC Web应用 入门开发教程系列。
 

前言:

全局控制器的作用:

  1. 1、可接收所有的404请求,做统一处理。
  2.  
  3. 2、可以实现一些公共的全局的事件。

接收404的过程详细的描述:

  1. 对于Taurus.MVC中运行的请求,如果没有对应的控制器接收,默认产生404
  2.  
  3. 如果项目中存在DefaultController全局控制器,则转交给DefaultController
  4.  
  5. 如果DefaultController没有对应的方法接收,仍产生404
  6. 如果需要对所有的404请求,做统一的处理输出,则可以重载Default方法,
  7.  
  8. 该方法为最终方法,它可以接收所有的404请求。

下面介绍:全局控制器中的全局事件,文件有点类似以前的Global.cs的味道。

全局控制器的完整方法与注释说明:

  1. /// <summary>
  2. /// 全局控制器(适全全局事件处理)
  3. /// </summary>
  4. public class DefaultController : Taurus.Core.Controller
  5. {
  6. /// <summary>
  7. /// 所有寻址不到的请求都集中执行到此方法(不想接收404则删除此重载方法即可)。
  8. /// </summary>
  9. public override void Default()
  10. {
  11. Write("DefaultController : Hello world");
  12. }
  13. /// <summary>
  14. /// 用于所有的请求合法性验证,配合[Ack]属性
  15. /// 启用时:局部的先执行(若存在),无局部才执行全局。
  16. /// </summary>
  17. public static bool CheckAck(IController controller, string methodName)
  18. {
  19. //需要自己实现Ack验证
  20. return !string.IsNullOrEmpty(controller.Query<string>("ack"));
  21.  
  22. }
  23.  
  24. /// <summary>
  25. /// 用于需要登陆后的身份验证,配合[Token]属性
  26. /// 启用时:局部的先执行(若存在),无局部才执行全局。
  27. /// </summary>
  28. public static bool CheckToken(IController controller, string methodName)
  29. {
  30. //需要自己实现,或者通过配置Taurus.Auth启动自带的验证(自带的注释掉此方法即可)。
  31. return !string.IsNullOrEmpty(controller.Query<string>("token"));
  32. }
  33.  
  34. /// <summary>
  35. /// 用于校验微服务的内部身份验证,配合[MicroService]属性
  36. /// 启用时:全局仅此一个生效,局部的失效。
  37. /// </summary>
  38. public static bool CheckMicroService(IController controller, string methodName)
  39. {
  40. return MicroService.Config.ServerKey == controller.Query<string>(MicroService.Const.HeaderKey);
  41. }
  42.  
  43. /// <summary>
  44. /// 全局【路由映射】
  45. /// 启用时:所有请求都进入此地做映射(需要映射时,返回映射的地址;不需要映射的返回空即可)。
  46. /// </summary>
  47. public static string RouteMapInvoke(HttpRequest request)
  48. {
  49. //if (request.Url.LocalPath.StartsWith("/api/") && RouteConfig.RouteMode == 2)
  50. //{
  51. // return "/test" + request.RawUrl;
  52. //}
  53. return string.Empty;
  54. }
  55. /// <summary>
  56. /// 全局【方法执行前拦截】
  57. /// 启用时:先全局,再执行局部(若存在)。
  58. /// </summary>
  59. public static bool BeforeInvoke(IController controller, string methodName)
  60. {
  61. return true;
  62. }
  63. /// <summary>
  64. /// 全局【方法执行后业务】
  65. /// 启用时:先执行局部(若存在),再执行全局。
  66. /// </summary>
  67. public static void EndInvoke(IController controller, string methodName)
  68. {
  69.  
  70. }
  71. }

全局方法都是静态方法,手写不太方便,对于有全局控制需要的,可以从此处Copy过去要用到的方法,不需要的忽略或注释掉。

下面补充其它说明:

其它1、全局拦截404的方法补充说明:

通过全局拦截后,默认会变成自定义方式:

1、正常处理流程,输出的状态码为200,如果需要返回404状态码,设置输出的状态码即可,如:

  1. public override void Default()
  2. {
  3. Response.StatusCode = 404;
  4. Write("DefaultController : Hello world");
  5. }

2、如果想返回自定义页面,有两种方式:

  1. 1、直接读取文件路径,然后Write出去即可。
  2.  
  3. 2、利用小技巧,让它直接触发MVC的页面加载机制即可,按路径存放页面即可:/Views/Default/Default.html

其它2、全局方法的效用补充说明:

在一个系统中,后续会有一些边缘需求,比如:

  1. 1、加强安全校验;
  2.  
  3. 2、方法调用次数的统计;
  4.  
  5. 3、请求日志的记录
  6.  
  7. 4、......

都可以在全局方法中自由发挥,比如在方法结束后:

收集请求参数或处理结果,放置到全局队列中,开个线程在全局定时扫描处理等。

总结:

DefaultController的名字是约定好的,用处也比较实在,一般项目都会用到它。

具体各方法的执行顺序,可以看该方法上的注释。

下一篇介绍:业务逻辑基类LogicBase的使用,还有两篇,将转入微服务系列教程。

Taurus.MVC WebAPI 入门开发教程6:全局控制器DefaultController与全局事件。的更多相关文章

  1. Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义、获取及基础校验属性【Require】。

    系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...

  2. Taurus.MVC WebAPI 入门开发教程5:控制器安全校验属性【HttpGet、HttpPost】【Ack】【Token】【MicroService】。

    系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...

  3. Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行(含系列目录)。

    前言: Taurus.MVC 微服务版本已经发布了:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单. 以前都是框架发布时写点相关功能点的文章,没有形成 ...

  4. Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World。

    系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...

  5. Taurus.MVC WebAPI 入门开发教程3:路由类型和路由映射。

    系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...

  6. Taurus.MVC WebAPI 入门开发教程8:WebAPI文档与自动化测试。

    系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...

  7. Taurus.MVC 微服务框架 入门开发教程:项目集成:4、默认安全认证与自定义安全认证。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  8. Taurus.MVC 微服务框架 入门开发教程:项目集成:6、微服务间的调用方式:Rpc.StartTaskAsync。

    系统目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  9. Taurus.MVC 微服务框架 入门开发教程:项目部署:7、微服务节点的监控与告警。

    系统目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

随机推荐

  1. 每天一个 HTTP 状态码 前言

    前前言 在重新开始写博文(其实大多也就最多算是日常笔记小结)之际,就想着从短小精悍的文章入手,就想到了 HTTP 状态码.另外,记得很久之前,看过一个<每天一个 Linux 命令>系列文章 ...

  2. Redis 应用只 消息队列 简单实现(生产者 消费者模式)

    运行效果:

  3. JAVA - 启动线程有哪几种方式

    JAVA - 启动线程有哪几种方式 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行 ...

  4. 2021.03.06【NOIP提高B组】模拟 总结

    T1 看起来十分复杂,打表后发现答案是 \(n*m\mod p\) 具体的证明... 原式的物理意义,就是从坐标原点(0,0),用每一种合法的斜率, 穿过坐标[1 ~ n , 1 ~ m]的方阵中的整 ...

  5. 技术分享 | app自动化测试(Android)--元素定位方式与隐式等待

    原文链接 元素定位是 UI 自动化测试中最关键的一步,假如没有定位到元素,也就无法完成对页面的操作.那么在页面中如何定位到想要的元素,本小节讨论 Appium 元素定位方式. Appium的元素定位方 ...

  6. 使用.NetCore自带的后台作业,出入队简单模拟生产者消费者处理请求响应的数据

    环境:Core:3.1的项目 说明:由于该方案为个人测试项目,重启时队列中的部分数据很可能会丢失, 对数据有要求的该方案不适用,不能照搬需要持久化处理, 另外发布到Linux Docker中通常不会自 ...

  7. Python:socket编程教程

    ocket是基于C/S架构的,也就是说进行socket网络编程,通常需要编写两个py文件,一个服务端,一个客户端. 首先,导入Python中的socket模块: import socket Pytho ...

  8. Map集合中的同一键值key重复赋值

    前言: 验证:对Map集合中的同一键值key重复赋值? 结果:对Map集合中的同一键值key重复赋值会覆盖之前的结果. 验证如下: Map<String, Object> map = ne ...

  9. Trie 树进阶学习笔记

    前言 没脑子选手发现自己什么都不会 ... \(\text{More and more vegetables, What should I do?}\) 正文 Trie 树简介 大概是人类的话都知道吧 ...

  10. centos系统管理高级篇

    1 enable virtual box 控制 - 关机 可以通过虚拟机的关机按钮执行关机,而不是登陆centos再执行init 0 首先,安装acpid包 如果你的centos已经安装这个包,就省略 ...