Как я могу получить текущее имя маршрута с помощью ASP.NET Core?

У меня есть приложение, написанное поверх фреймворка ASP.NET Core 2.2.

У меня следующий контроллер

public class TestController : Controller
{
    [Route("some-parameter-3/{name}/{id:int}/{page:int?}", Name = "SomeRoute3Name")]
    [Route("some-parameter-2/{name}/{id:int}/{page:int?}", Name = "SomeRoute2Name")]
    [Route("some-parameter-1/{name}/{id:int}/{page:int?}", Name = "SomeRoute1Name")]
    public ActionResult Act(ActVM viewModel)
    {
        // switch the logic based on the route name

        return View(viewModel);
    }
}

Как я могу получить название маршрута в действии и / или представлении?


person Junior    schedule 13.07.2019    source источник


Ответы (2)


Внутри контроллера вы можете прочитать AttributeRouteInfo < / a> из _ 3_. AttributeRouteInfo имеет > свойство, которое содержит искомое значение:

public ActionResult Act(ActVM viewModel)
{
    switch (ControllerContext.ActionDescriptor.AttributeRouteInfo.Name)
    {
        // ...
    }

    return View(viewModel);
}

Внутри представления Razor ActionDescriptor доступен через ViewContext свойство:

@{
    var routeName = ViewContext.ActionDescriptor.AttributeRouteInfo.Name;
}
person Kirk Larkin    schedule 13.07.2019

Для меня ответ @ krik-larkin не сработал, поскольку AttributeRouteInfo всегда был нулевым в моем случае.

Вместо этого я использовал следующий код:

var endpoint = HttpContext.GetEndpoint() as RouteEndpoint;
var routeNameMetadata = endpoint?.Metadata.OfType<RouteNameMetadata>().SingleOrDefault();
var routeName = routeNameMetadata?.RouteName;
person Dave de Jong    schedule 27.03.2021
comment
Точно так же и в моей ситуации. Это должно быть отмечено как ответ. Спасибо - person Andrey Kusnetsov; 29.06.2021