2010-01-31 125 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