ASP.NET MVC의 컨트롤러에서 경로 이름을 어떻게 얻을 수 있습니까?
ASP.NET MVC 경로에는 매핑될 때 이름이 있습니다.
routes.MapRoute(
"Debug", // Route name -- how can I use this later????
"debug/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = string.Empty } );
위의 예에서 "디버그"와 같이 경로 이름을 얻는 방법이 있습니까? 컨트롤러의 OnActionExecuting에서 액세스하고 싶습니다. 예를 들어 URL 앞에 /debug/...
불행히도 경로 이름은 경로에 저장되지 않습니다. 컬렉션의 키로 MVC에서 내부적으로만 사용됩니다. 예를 들어 HtmlHelper.RouteLink로 링크를 생성할 때 이것이 여전히 사용할 수 있는 것이라고 생각합니다.
어쨌든, 나는 그것이 필요했고 여기에 내가 한 일이 있습니다.
public static class RouteCollectionExtensions
{
public static Route MapRouteWithName(this RouteCollection routes,
string name, string url, object defaults, object constraints)
{
Route route = routes.MapRoute(name, url, defaults, constraints);
route.DataTokens = new RouteValueDictionary();
route.DataTokens.Add("RouteName", name);
return route;
}
}
따라서 다음과 같이 경로를 등록할 수 있습니다.
routes.MapRouteWithName(
"myRouteName",
"{controller}/{action}/{username}",
new { controller = "Home", action = "List" }
);
내 컨트롤러 작업에서 다음을 사용하여 경로 이름에 액세스할 수 있습니다.
RouteData.DataTokens["RouteName"]
도움이 되기를 바랍니다.
아래와 같은 표준 MapRoute 설정을 사용하는 경우:
routes.MapRoute( name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
...이것은 보기에서 작동합니다...
var routeName = Url.RequestContext.RouteData.Values["action"].ToString();
추가 매개변수의 기본값을 사용하여 경로 값을 통해 경로 이름을 전달할 수 있습니다.
routes.MapRoute(
name: "MyRoute",
url: "{controller}/{action}/{id}",
defaults: new { routeName = "MyRoute", controller = "Home", action = "Index", id=UrlParameter.Optional }
);
그런 다음 컨트롤러 컨텍스트에서 전달된 값을 가져올 수 있습니다.
string routeName = ControllerContext.RouteData.Values["routeName"].ToString();
이것은 질문에 직접적으로 대답 하지 않습니다 (당신이 현학적이고 싶다면); 그러나 실제 목적은 경로 이름이 주어지면 경로의 기본 URL을 얻는 것 같습니다. 그래서, 이것이 내가 한 방법입니다.
내 경로는 다음과 RouteConfig.cs
같이 정의 되었습니다.
routes.MapRoute(
name: "MyRoute",
url: "Cont/Act/{blabla}",
defaults: new { controller = "Cont", action = "Act"}
);
그리고 경로의 기본 URL을 얻으려면:
var myRoute = Url.RouteUrl("MyRoute", new { blabla = "blabla" }).Replace("blabla", "");
내가 원하는 경로의 기본 URL을 제공했습니다.
/Cont/Act/
도움이 되었기를 바랍니다.
대안 솔루션은 솔루션 구성을 사용하는 것입니다.
protected override OnActionExecuting()
{
#if DEBUG
// set up stuff in the ViewData
#endif
// continue
}
이와 같이 경로 이름을 참조할 필요가 없어야 합니다. 이것이 MVC가 이런 종류의 작업을 수행하는 것을 어렵게 만드는 이유입니다.
다른 옵션 - string[] namespaces 인수와 함께 MapRoute를 사용하면 네임스페이스를 다음과 같이 볼 수 있습니다. RouteData.DataTokens["Namespaces"]
ReferenceURL : https://stackoverflow.com/questions/363211/how-can-i-get-the-route-name-in-controller-in-asp-net-mvc
'IT이야기' 카테고리의 다른 글
Tensorflow는 레이블이 있는 이미지를 읽습니다. (0) | 2021.10.25 |
---|---|
인터페이스 대신 람다 전달 (0) | 2021.10.24 |
Eclipse에서 XML 파일 실행을 중지하는 방법 (0) | 2021.10.24 |
name()과 local-name()의 차이점 (0) | 2021.10.24 |
비 활동 클래스에서 getSystemService를 사용하는 방법 (0) | 2021.10.24 |