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 配置:

<?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,這是一個全局的控制器,後續會有一篇專門講它。

 

根據規則,訪問:

 

對不上規則的,還是同樣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有好幾個全局事件,此處只講路由映射相關的:

 /// <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拿到當前請求,根據條件處理,返回需要映射的路徑即可,不映射的地址返回空值即可。

總結:

本篇講述了路由的幾種類型和一些細節和全局的映射處理方法,下一篇,講述控制器更進一步的相關信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章