1

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

 1 year ago
source link: https://www.cnblogs.com/cyq1162/p/16529764.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、路由规则的种类:

一共有3类:默认为1。

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

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

web.config 配置:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="Taurus.RouteMode" value="1"/>
  </appSettings>
</configuration>

appsettings.json 配置:

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

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

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

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

17408-20220728191117730-155211322.png

根据规则,访问:

17408-20220728191246091-223856020.png

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

    public partial class DefaultController : Controller
    {
        public void Hello()
        {
            Write("Default : Hello " + Para);
        }

        public override void Default()
        {
            Write("Hello world");
        }
  }

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

17408-20220728191602723-327217490.png

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有好几个全局事件,此处只讲路由映射相关的:

 /// <summary>
    /// 全局控制器(适全全局事件处理)
    /// </summary>
    public class DefaultController : Taurus.Core.Controller
    {

        /// <summary>
        /// 全局【路由映射】
        /// 启用时:所有请求都进入此地做映射。
        /// </summary>
        public static string RouteMapInvoke(HttpRequest request)
        {
            if (request.Url.LocalPath.StartsWith("/api/") && RouteConfig.RouteMode == 2)
            {
                return "/test" + request.RawUrl;
            }
            return string.Empty;
        }
        
    }

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK