在mvc中路由的配置,直接關係著我們的請求訪問的控制器和方法;url對seo有著重要作用,全靠mvc內部定義的配置路由和生成url的方法在有的時間是不夠的,本文就來了解一下自定義配置路由和url的生成。
在新建乙個mvc專案後,開啟global檔案,可以看到路由的註冊是使用乙個routecollection型別的引數來實現的。按f12轉到定義會發現,其繼承了collection,除了一些maproute等一些方法之外還有乙個add方法,其簽名為:
public實際上就是乙個標記路由的名字,還有乙個是routebase類,按f12,其對應的有兩個方法:void add(string name, routebase item);
//第乙個方法:通過處理請求資訊httpcontext,來指定通過哪個控制器和方法處理請求的;第二個方法用來指定請求頁的連線生成的url.下面就通過乙個例項來說明以上兩個方法的使用。當在派生類中重寫時,會返回有關請求的路由資訊。
//當在派生類中重寫時,會檢查路由是否與指定值匹配,如果匹配,則生成乙個 url,然後檢索有關該路由的資訊
public
abstract virtualpathdata getvirtualpath(requestcontext requestcontext, routevaluedictionary values);
2.1需求說明
public actionresult list(int page = 1並新增對應的檢視,)
@然後新增乙個資料夾infranstructure,並新建乙個類myhelper,然後讓其繼承routebase類,如圖:"@url.action(
"product"
, "list"
, new )
"@url.action(
"product"
,"list"
,new )
"> @viewbag.content
"@url.action(
"product"
, "list"
, new )
2.2getroutedata的使用
為了配置路由,我們不使用maproute方法,可以把global檔案裡面的預設的maproute去掉,我們使用上面的getroutedata方法,我們通過httpcontext來指定控制器裡面的方法以到達處理請求的目的。**如下:
publicclass
myhelper : routebase
/*如果不符合要求的url,返回null,以便使用其他路由匹配,進而指定
controller和action以及action的引數
*/return
null
; }
public
override
virtualpathdata getvirtualpath(requestcontext requestcontext, routevaluedictionary values)
}因為開始的時間,我們去掉了maproute,現在我們要使用add方法,所以在global檔案中新增
routes.add(new myhelper());現在執行程式,並在位址列輸入http://localhost:3519/product/list/page/1,效果圖如下:
2.3 getvirtualpath的使用
廢話不多說,還是把**貼出來,部分說明見注釋:
///現在執行http://localhost:3519/product/list/page/1頁面,已經是我們想要的結果了。///為指定請求頁生成特定的url的樣子
/// ///
請求頁 ///
請求頁中的html.action等輔助類
///public
override
virtualpathdata getvirtualpath(requestcontext requestcontext, routevaluedictionary values)
else
return
new virtualpathdata(this
, strurl);}}
return
null
; }
注意:上面的兩個方法判斷的時間一定要精確的判斷,否則可能指定到錯誤的控制器和方法上以及錯誤的url。再者,當不符合指定要求時要返回到null,以便使用其他的路由配置。本文主要通過乙個分頁的例項來說明自定義路由和url的生成。例子或許欠佳,但是比較好理解。原始碼.
mvc3之自定義類實現路由配置和URL的生成
在mvc中路由的配置,直接關係著我們的請求訪問的控制器和方法 url對seo有著重要作用,全靠mvc內部定義的配置路由和生成url的方法在有的時間是不夠的,本文就來了解一下自定義配置路由和url的生成。在新建乙個mvc專案後,開啟global檔案,可以看到路由的註冊是使用乙個routecollect...
精通MVC3摘譯 3 自定義路由系統
路由系統非常靈活,但是如果這還不能滿足你的 需求,那麼,你可以定製路由系統。建立基於routebase的介面 getroutedata httpcontextbase httpcontext 這是乙個url匹配工作機制。framework依次在每個routetable.routes呼叫這個方法。直到...
MVC3 自定義的錯誤頁
asp.net mvc3中如果配置檔案出錯了,怎麼跳轉到自定義的錯誤頁,現在參考網上的檔案是說 新增 如下配置檔案,並且在路徑views shared 下新增error頁面,測試下沒有用的,請大家看看有什麼好的建議啊,謝謝了啊!mvc根本不會理睬web.config中的customerrors,預設...