سؤال

أريد استرداد قيم المسار من 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top