3

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

 1 year ago
source link: https://www.cnblogs.com/cyq1162/p/16532335.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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、Taurus.MVC 微服务 入门开发教程系列。

2、Taurus.MVC Web应用 入门开发教程系列。

全局控制器的作用:

1、可接收所有的404请求,做统一处理。

2、可以实现一些公共的全局的事件。

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

对于Taurus.MVC中运行的请求,如果没有对应的控制器接收,默认产生404;

如果项目中存在DefaultController全局控制器,则转交给DefaultController。

如果DefaultController没有对应的方法接收,仍产生404。
如果需要对所有的404请求,做统一的处理输出,则可以重载Default方法,

该方法为最终方法,它可以接收所有的404请求。

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

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

/// <summary>
    /// 全局控制器(适全全局事件处理)
    /// </summary>
    public class DefaultController : Taurus.Core.Controller
    {
        /// <summary>
        /// 所有寻址不到的请求都集中执行到此方法(不想接收404则删除此重载方法即可)。
        /// </summary>
        public override void Default()
        {
            Write("DefaultController : Hello world");
        }
        /// <summary>
        /// 用于所有的请求合法性验证,配合[Ack]属性
        /// 启用时:局部的先执行(若存在),无局部才执行全局。
        /// </summary>
        public static bool CheckAck(IController controller, string methodName)
        {
            //需要自己实现Ack验证
            return !string.IsNullOrEmpty(controller.Query<string>("ack"));

        }

        /// <summary>
        /// 用于需要登陆后的身份验证,配合[Token]属性
        /// 启用时:局部的先执行(若存在),无局部才执行全局。
        /// </summary>
        public static bool CheckToken(IController controller, string methodName)
        {
            //需要自己实现,或者通过配置Taurus.Auth启动自带的验证(自带的注释掉此方法即可)。
            return !string.IsNullOrEmpty(controller.Query<string>("token"));
        }

        /// <summary>
        /// 用于校验微服务的内部身份验证,配合[MicroService]属性
        /// 启用时:全局仅此一个生效,局部的失效。
        /// </summary>
        public static bool CheckMicroService(IController controller, string methodName)
        {
            return MicroService.Config.ServerKey == controller.Query<string>(MicroService.Const.HeaderKey);
        }

        /// <summary>
        /// 全局【路由映射】
        /// 启用时:所有请求都进入此地做映射(需要映射时,返回映射的地址;不需要映射的返回空即可)。
        /// </summary>
        public static string RouteMapInvoke(HttpRequest request)
        {
            //if (request.Url.LocalPath.StartsWith("/api/") && RouteConfig.RouteMode == 2)
            //{
             //   return "/test" + request.RawUrl;
            //}
            return string.Empty;
        }
        /// <summary>
        /// 全局【方法执行前拦截】
        /// 启用时:先全局,再执行局部(若存在)。
        /// </summary>
        public static bool BeforeInvoke(IController controller, string methodName)
        {
            return true;
        }
        /// <summary>
        /// 全局【方法执行后业务】
        /// 启用时:先执行局部(若存在),再执行全局。
        /// </summary>
        public static void EndInvoke(IController controller, string methodName)
        {

        }
    }

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

下面补充其它说明:

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

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

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

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

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

1、直接读取文件路径,然后Write出去即可。

2、利用小技巧,让它直接触发MVC的页面加载机制即可,按路径存放页面即可:/Views/Default/Default.html。

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

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

1、加强安全校验;

2、方法调用次数的统计;

3、请求日志的记录

4、......

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

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

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

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

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

版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
个人微信公众号
17408-20180523041027505-1002652922.jpg
创业QQ群:617713515
17408-20180523034329518-624244005.jpg
Donation(扫码支持作者):支付宝:
o_2.jpg
Donation(扫码支持作者):微信:
o_1.jpg
345x200--2953d058277cb63c6b1cd127285163335cd6751e.jpg
posted on 2022-08-12 15:12  路过秋天  阅读(76)  评论(0)  编辑  收藏  举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK