mvc3之自定義類實現路由配置和URL的生成

2021-09-06 08:59:38 字數 2747 閱讀 9867

在mvc中路由的配置,直接關係著我們的請求訪問的控制器和方法;url對seo有著重要作用,全靠mvc內部定義的配置路由和生成url的方法在有的時間是不夠的,本文就來了解一下自定義配置路由和url的生成。

在新建乙個mvc專案後,開啟global檔案,可以看到路由的註冊是使用乙個routecollection型別的引數來實現的。按f12轉到定義會發現,其繼承了collection,除了一些maproute等一些方法之外還有乙個add方法,其簽名為:

public

void add(string name, routebase item);

實際上就是乙個標記路由的名字,還有乙個是routebase類,按f12,其對應的有兩個方法:

//

當在派生類中重寫時,會返回有關請求的路由資訊。

//當在派生類中重寫時,會檢查路由是否與指定值匹配,如果匹配,則生成乙個 url,然後檢索有關該路由的資訊

public

abstract virtualpathdata getvirtualpath(requestcontext requestcontext, routevaluedictionary values);

第乙個方法:通過處理請求資訊httpcontext,來指定通過哪個控制器和方法處理請求的;第二個方法用來指定請求頁的連線生成的url.下面就通過乙個例項來說明以上兩個方法的使用。

2.1需求說明

public actionresult list(int page = 1

)

並新增對應的檢視,

@

"@url.action(

"product"

, "list"

, new )

"@url.action(

"product"

,"list"

,new )

"> @viewbag.content

"@url.action(

"product"

, "list"

, new )

然後新增乙個資料夾infranstructure,並新建乙個類myhelper,然後讓其繼承routebase類,如圖:

2.2getroutedata的使用

為了配置路由,我們不使用maproute方法,可以把global檔案裡面的預設的maproute去掉,我們使用上面的getroutedata方法,我們通過httpcontext來指定控制器裡面的方法以到達處理請求的目的。**如下:

public

class

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的使用

廢話不多說,還是把**貼出來,部分說明見注釋:

///

///為指定請求頁生成特定的url的樣子

/// ///

請求頁 ///

請求頁中的html.action等輔助類

///public

override

virtualpathdata getvirtualpath(requestcontext requestcontext, routevaluedictionary values)

else

return

new virtualpathdata(this

, strurl);}}

return

null

; }

現在執行http://localhost:3519/product/list/page/1頁面,已經是我們想要的結果了。

注意:上面的兩個方法判斷的時間一定要精確的判斷,否則可能指定到錯誤的控制器和方法上以及錯誤的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,預設...