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


    系列目录

    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、路由规则的种类:

    一共有3类:默认为1。

    配置模式【值为0,1或2】[默认为1]
          值为0:匹配{Action}/{Para}
          值为1:匹配{Controller}/{Action}/{Para}
          值为2:匹配{Module}/{Controller}/{Action}/{Para}

    可以通过配置来切换类型:

    web.config 配置:

    复制代码
    "1.0"?>
    
      
        "Taurus.RouteMode" value="1"/>
      
    
    复制代码

    appsettings.json 配置:

    {
      "AppSettings": {"Taurus.RouteMode": 1
      }
    }

    下面对三种类型做进一步讲解:

    2、路由规则配置值0:匹配{Action}/{Para}

    如果规则配置为0,则所有请求转入全局DefaultController,这是一个全局的控制器,后续会有一篇专门讲它。

     

    根据规则,访问:

     

    对不上规则的,还是同样404,根据上一篇,同理,可以通过重载Default,获得404的 拦截:

    复制代码
        public partial class DefaultController : Controller
        {
            public void Hello()
            {
                Write("Default : Hello " + Para);
            }
    
            public override void Default()
            {
                Write("Hello world");
            }
      }
    复制代码

    拦截后,任意之前404的请求都跑到Default中,并输出:

    3、路由规则配置值1:匹配{Controller}/{Action}/{Para}

    注意事项:

    复制代码
    控制器的名称是唯一的,同一个项目中不应该出现相同的控制器名称。
    
    如果出现,是执行哪一个控制器呢?如果想知道,请理解以下的文字:

    控制器的上一级名称空间字符串比较,取最小值的为默认控制器: 如:名称空间:XXX.YYY.A.Controller与XX.YY.ZZ.B.Controller 这里仅比较A和B,A靠前,所以取A的为默认。
    复制代码

    寻址规则:通过请求路径匹配控制器,如果匹配不到,则转到DefaultController(全局),若全局控制器也不在,则返回错误结果。

    4、路由规则配置值2:匹配{Module}/{Controller}/{Action}/{Para}

    说明事项:控制器的名称可以不唯一,存在多个不同的名称空间下:

    复制代码
    //匹配路径:/test/hello/...
    namespace
    Taurus.Controllers.Test { public class HelloController : Taurus.Core.Controller {public void World() { Write("Test.Hello World"); } } }
    //匹配路径:/a/hello/...
    namespace Taurus.Controllers.A
    {
        public class HelloController : Taurus.Core.Controller
        {
            public void World()
            {
                Write("A.Hello World");
            }
        }
    }
    
    
    复制代码

    如:

    /test/hello/world 则匹配输出:Test.Hello World
    /a/hello/world 则匹配输出:A.Hello Wrold

    对于不匹配module的,则由控制器上一级名称空间字符串取最值小(Test.HelloController和A.HelloController比较)的做为默认处理程序。

    如:

    /xxx/hello/world 则匹配输出:A.Hello Wrold

    对于需要提供版本路径和版本升级的接口,使用此路由模式比如方便,如:

    /v1/hello/world
    /v2/hello/world
     通过名称空间,即可赋予版本号。

    5、路由映射

    路由映射,是在全局DefaultController中处理的,DefaultController有好几个全局事件,此处只讲路由映射相关的:

    复制代码
     /// 
        /// 全局控制器(适全全局事件处理)
        /// 
        public class DefaultController : Taurus.Core.Controller
        {
    
            /// 
            /// 全局【路由映射】
            /// 启用时:所有请求都进入此地做映射。
            /// 
            public static string RouteMapInvoke(HttpRequest request)
            {
                if (request.Url.LocalPath.StartsWith("/api/") && RouteConfig.RouteMode == 2)
                {
                    return "/test" + request.RawUrl;
                }
                return string.Empty;
            }
            
        }
    复制代码

    说明,通过request拿到当前请求,根据条件处理,返回需要映射的路径即可,不映射的地址返回空值即可。

    总结:

    本篇讲述了路由的几种类型和一些细节和全局的映射处理方法,下一篇,讲述控制器更进一步的相关信息。

  • 相关阅读:
    [go学习笔记.第十二章.文件操作] 1.文件的基本介绍以及基本操作
    故障演练的关键要素及重要性
    C#的LINQ查询
    SQL Server创建链接服务器的方法
    (附源码)ssm牙科诊所预约网站 毕业设计 260952
    源代码转换:Tangible Software Solutions v22.10.20
    Centos7安装Docker
    自动定量包装机机械及控制系统设计(PLC控制)
    【资损】系统迭代过程中的兼容性设计
    1057 Stack
  • 原文地址:https://www.cnblogs.com/cyq1162/p/16529764.html