2010-01-31 121 views
3

我想從路由表中檢索路由值,但它是空的。任何人都可以幫忙嗎?從路由表中檢索路由值

public static class GetRouteValues 
{ 
    public static string GetSomeValue() 
    { 
     RouteCollection routes = RouteTable.Routes; 
     var value = routes["somevalue"].ToString(); 
     return value; 
    } 
} 

我想要檢索在global.asax文件中使用此值並設置爲某些路由值的默認值。

string value = GetRouteValues.GetSomeValue(); 
routes.MapRoute(null, 
         "{_value}/home", 
         new 
         { 
          _value = value, 
          controller = "home", 
          action = "index" 
         }); 
+0

什麼是'GetSomeValue()'該怎麼辦/回報? – 2010-01-31 21:06:59

+0

您是否試圖在當前上下文中從路線中拉出其中一個值,或者您是否嘗試拉出其中一條全局定義的路線。 – anthonyv 2010-01-31 21:09:51

+0

@Jorn:這種方法反彈應該從路由中檢索的字符串值///// @anthonyv:是的,我試圖從當前上下文中的路由中拉出。 – Sadegh 2010-01-31 21:17:44

回答

3

好吧,如果你想獲得當前的路線,你可以從一個控制器內做到這一點....

var completeRoute = this.ControllerContext.RouteData.Route; 
//or 
var justValue = this.ControllerContext.RouteData.Values["value"] 

讓我知道,如果那是你所追求的......

更新:

好的我認爲這應該做你以後的事情。您應該可以在不傳入任何上下文對象的情況下在靜態方法中使用它。

var httpContext = new HttpContextWrapper(HttpContext.Current); 
var requestContext = new RequestContext(httpContext, new RouteData()); 
var completeRoute = requestContext.RouteData.Route; 
var justValue = requestContext.RouteData.Values["value"]; 

希望有幫助。

+0

我不想在控制器中獲取當前的路由值,我想從簡單的類中獲取。請在我的問題上看到代碼。值應該通過GetSomeValue方法檢索。 – Sadegh 2010-02-01 15:51:11

+0

謝謝親愛的anthonyv – Sadegh 2010-02-02 18:35:42

+0

如何在global.asax中獲取這些值? – Biki 2016-02-10 06:17:18

1

我用我的靜態類的anthonyv的答案,但結果爲空。以下工作對我來說(類似於如何訪問靜態類中的Session對象)。

var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"]; 
var action = HttpContext.Current.Request.RequestContext.RouteData.Values["action"]; 
+0

如何在global.asax中獲取這些值? – Biki 2016-02-10 06:17:27

+0

這篇文章將在6年後復活! – JoshYates1980 2016-02-24 19:50:36

0

全球將是很好的,但到目前爲止,我只看到它控制器內:

Namespace Controllers 
    Public Class HomeController 
    Inherits BaseController 
     Dim routeValues = System.Web.HttpContext.Current.Request.RequestContext.RouteData.Values 
     Dim actionName As String 
     Dim controllerName As String 

     Public Function Index(id As String) As ActionResult 
     Try 
      Dim x As Integer = 0 
      Dim y As Integer = 5 
      Dim z As Integer = y/x 
     Catch ex As Exception 
      If routeValues IsNot Nothing Then 
       If routeValues.ContainsKey("action") Then 
        actionName = routeValues("action").ToString() 
       End If 
       If routeValues.ContainsKey("controller") Then 
        controllerName = routeValues("controller").ToString() 
       End If 
      End If 

      Log.LogError(ex, controllerName, actionName) 
     End Try