Abrufen Route Werte von Routetable
-
24-09-2019 - |
Frage
ich will Route Werte von Routetable abrufen, aber es ist null. Kann jemand helfen?
public static class GetRouteValues
{
public static string GetSomeValue()
{
RouteCollection routes = RouteTable.Routes;
var value = routes["somevalue"].ToString();
return value;
}
}
Ich möchte diesen Wert abrufen für einige Routen Wert in global.asax-Datei und Satz als Standardwert verwendet wird.
string value = GetRouteValues.GetSomeValue();
routes.MapRoute(null,
"{_value}/home",
new
{
_value = value,
controller = "home",
action = "index"
});
Lösung
Ok, wenn Sie versuchen, die aktuelle Route zu bekommen, können Sie dies aus einem Controller ....
var completeRoute = this.ControllerContext.RouteData.Route;
//or
var justValue = this.ControllerContext.RouteData.Values["value"]
Lassen Sie mich wissen, wenn das ist, was Sie nach ...
UPDATE:
Ok ich denke, das sollte das tun, was Sie nach. Sie sollten in jedem Kontext Objekt ohne den Weg dies zu verwenden, in einer statischen Methode in der Lage sein.
var httpContext = new HttpContextWrapper(HttpContext.Current);
var requestContext = new RequestContext(httpContext, new RouteData());
var completeRoute = requestContext.RouteData.Route;
var justValue = requestContext.RouteData.Values["value"];
Ich hoffe, das hilft.
Andere Tipps
habe ich anthonyv Antwort für meine statische Klasse, aber die Ergebnisse waren null. Die folgenden arbeitete für mich (ähnlich wie den Zugriff auf Session-Objekte in einer statischen Klasse).
var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"];
var action = HttpContext.Current.Request.RequestContext.RouteData.Values["action"];
würde Globale schön, aber bisher habe ich es nur im Regler gesehen:
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