MVC Route層層深入

2022-02-26 23:00:27 字數 2889 閱讀 1322

1.前期準備

新建乙個mvc專案,並新增home和about兩個控制器

在這兩個控制器對應新增index頁面

namespace

study_mvc_route.controllers

public

string regex(int year,int month,int

day)

--";

//$是在字串中內嵌引數}}

}

namespace

study_mvc_route.controllers}}

2.新增路由

主要屬性如下:

name: 路由名稱

url: 和url匹配的正規表示式,用{}表示乙個引數變數,可以為空;無{}則是乙個硬性的匹配要求

defaults: 預設,匹配上url後,若url引數為空,則使用預設動作 controller = 預設控制器, action = 預設動作, id = 引數

constraints: url引數約束

using

system;

using

system.collections.generic;

using

system.linq;

using

system.web;

using

system.web.mvc;

using

system.web.routing;

namespace

study_mvc_route

.axd/

");//

忽略路由

//--------------------------------新增路由------------------------------------------

//以test開始的url

//url沒有引入controller引數,所以controller使用預設值,若不給引數賦值,也使用預設值

routes.maproute(

name:

"test",

url:

"test//",

defaults:

new

);//route的書寫可以省略命名引數,即name、url、defaults這些命名引數可以省略,如下

//url為about可以訪問home/index

routes.maproute("

about1

", "

about

", new );

//url為about訪問about/index

routes.maproute("

about2

", "

", new );

//加大括號表示引數,不加則為乙個普通字串鏈結,是乙個硬性的匹配要求
//傳參對比

//使用constraints做引數約束

//home/regex_2014_05_19

routes.maproute(

name:

"regex",

url:

"/___",

defaults:

new ,

constraints:

new

", month = @"

\d", day = @"

\d" }//

@"\d"表示輸入四位數字,@表取消\的轉譯效果

);       //普通傳參

//home/regex?year=2014&month=05&day=19

routes.maproute(

name:

"default",

url: "//

",defaults:

new );}

}}

3.擴充套件

使用乙個路由擴充套件類對瀏覽器進行判斷

public

class

agentroute : routebase

else

}public

override

virtualpathdata getvirtualpath(requestcontext requestcontext, routevaluedictionary values)

}

在routeconfig中新增這個類的例項(也就是新增乙個路由規則)

routes.add(new agentroute());//這行**放在不同的路由下面有不同的效果
比如:1、放在最前面

這樣在進行其他路由判斷之前,會先進行這個判斷,即每次訪問url都會先判斷是否是edge瀏覽器

若是,命中路由

若不是,return null ;繼續往下判斷

2、要是將其放在路由test後面

那edge也可以訪問  test//   這個規則的url,因為這個路由規則會先被命中

效果展示:

chrome瀏覽器,正常訪問

edge瀏覽器,會訪問edge/index頁面,因為它命中了agentroute

層層剖析 service

service有localservice和remoteservice 啟動方式有bindservice和startservice 生命週期分別為oncreateservice onbindservice onunblindservice ondestroyservice oncreateservic...

層層遞進 廣度優先搜尋

從誰開始就把誰存到佇列裡,從它開始進行以後的步驟,廣搜的話會遇到許多分支一類的東西,每遇到乙個分支就要push進佇列裡,每次處理判斷時都要處理最前邊的,即front 處理的同時也要將其刪掉pop 方便可以一直處理front 的那個。在處理的過程中也要判斷找尋是否是結果,進行判斷。進行廣搜要靈活將st...

層層遞進 廣度優先搜尋

從題目可以看出,廣度優先搜尋是一層一層的搜尋,而深搜是一根筋,一直搜到底o o哈哈 到底怎麼實現廣搜呢?深搜是遞迴,想必大家可能恨死遞迴了。廣搜不用遞迴,就用迴圈和佇列就夠!這個題目,從起點開始,到達終點最短路徑是多少步?圖中鎖是障礙物。先構建乙個佇列,還是用結構體。還得有乙個陣列book來記錄走過...