استرداد قيم المسار من Routetable
-
24-09-2019 - |
سؤال
أريد استرداد قيم المسار من Routetable ، لكنه فارغ. هل يمكن لأي شخص أن يساعد؟
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"
});
المحلول
حسنًا ، إذا كنت تحاول الحصول على المسار الحالي ، يمكنك القيام بذلك من داخل وحدة تحكم ....
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"];
امل ان يساعد.
نصائح أخرى
لقد استخدمت إجابة Anthonyv لصفتي الثابتة ولكن النتائج كانت لاغية. لقد عمل ما يلي بالنسبة لي (على غرار كيفية الوصول إلى كائنات الجلسة في فصل ثابت).
var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"];
var action = HttpContext.Current.Request.RequestContext.RouteData.Values["action"];
سيكون العالمي لطيفًا ، لكن حتى الآن لم أره إلا داخل وحدة التحكم:
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
لا تنتمي إلى StackOverflow