﻿# ASP.NET MVC 開發心得分享 (13)：在類別庫取得 RouteData

之前在 ASP.NET Web Form 的年代要在 **類別庫(Class Library)** 專案中取得 HttpContext 的資訊，很容易就可以透過 [HttpContext.Current](http://msdn.microsoft.com/zh-tw/library/system.web.httpcontext.current.aspx) 屬性即可獲得所需資訊，也可以判斷 [HttpContext.Current](http://msdn.microsoft.com/zh-tw/library/system.web.httpcontext.current.aspx) 是否為 null 來決定是否目前是在 Web 環境下，雖然到了 ASP.NET MVC 的世界也有 [HttpContext.Current](http://msdn.microsoft.com/zh-tw/library/system.web.httpcontext.current.aspx) 但是我們更需要 [RouteData](http://msdn.microsoft.com/zh-tw/library/system.web.routing.routedata.aspx) 資訊讓我們能進一步取得 ASP.NET MVC 的相關資訊。

在 **類別庫(Class Library)** 中一樣可以用 [HttpContext.Current](http://msdn.microsoft.com/zh-tw/library/system.web.httpcontext.current.aspx) 是否為 null 來判斷目前是否為 ASP.NET 的執行環境，而至於要取得 RouteData 資訊可以透過 [System.Web.Routing.RouteTable.Routes](http://msdn.microsoft.com/zh-tw/library/system.web.routing.routetable.routes.aspx) 這個靜態屬性將 RouteData 型別的資料傳回，請參考以下程式碼：

```
var route = RouteTable.Routes.GetRouteData(new HttpContextWrapper(HttpContext.Current));
```

以下是我在 **類別庫(Class Library)** 中下中斷點取得 Route Values 的示意圖：

![在 類別庫(Class Library) 中下中斷點取得 Route Values 的示意圖](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6b62b22b7e202de52f82-image.png "在 類別庫(Class Library) 中下中斷點取得 Route Values 的示意圖")

而在 **類別庫(Class Library)** 中要引用 ASP.NET MVC 的資訊至少必須載入以下圖示的兩個組件，如果沒有 System.Web 組件的話也要記得載入：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/dc3ca749cb856bdabde9-image.png)

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/95e0578611b50fe0beb7-image.png)

當你透過上述範例取得 route 物件時，就可以輕易存取 Route Values 了，如下範例：

```
var controllerName = route.Values["controller"]; var actionName = route.Values["action"];
```

**相關連結**

-   [Access RouteData For The Current Route From A Library Class In Asp.Net Mvc](http://eliasbland.wordpress.com/2009/10/07/access-routedata-for-the-current-route-from-a-library-class-in-asp-mvc/)
-   [System.Web.Routing.RouteTable.Routes 屬性](http://msdn.microsoft.com/zh-tw/library/system.web.routing.routetable.routes.aspx)
-   [HttpContext.Current 屬性](http://msdn.microsoft.com/zh-tw/library/system.web.httpcontext.current.aspx)
