# 用C# MVC在Action或View上取得Route的資料
###### tags: `程式設計`
## Action
取得完整Route的資料
```=C#
var myRoute = RouteData.Values;
```
單獨取一欄的Route資料
```=C#
var controller = RouteData.Values["controller"].ToString();
var action = RouteData.Values["action"].ToString();
var id = RouteData.Values["id"].ToString();
```
把Route資料轉成包含斜線的網址(string)
```=C#
var myRouteUrl = Url.RouteUrl(RouteData.Values);
```
## 在filter取得Route資料
```=C#
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var actionName = filterContext.RouteData;
}
```
### 取得網址、querystring 和 post的資料
承上,可以用 filterContext.HttpContext.Request 取相關資料
* Request.Url; (已包含 QueryString)
* Request.QueryString; (僅 QueryString)
* Request.Form; (僅 post form 的資料)
## View(razor)
View不能夠直接呼叫RouteData,需要用ViewContext.RouteData來取
```=C#
@ViewContext.RouteData.Values["id"]
```
##
## 參考資料
https://docs.microsoft.com/zh-tw/dotnet/api/system.web.routing.routedata?view=netframework-4.8
https://stackoverflow.com/questions/32530619/how-can-i-get-the-function-action-name-that-custom-attribute-is-attached-to-whil
https://stackoverflow.com/questions/7579967/retrieving-data-from-a-post-method-in-asp-net/7580203