如何知道当前映射了哪条路线

How to know which route is currently mapped

我有一条路线

routes.MapRoute(
                "User", // Route name
                "Person/{action}", // URL with parameters
                new { controller = "User" } // Parameter defaults
            );

这意味着如果我把 url 像

http://localhost/myApp/Person/Detail

那么它应该调用 User 控制器的 Detail 动作,对吗?

好的,我已经完成了,路由也很好用,意味着它正确地调用了动作。

现在,如果我想获取控制器名称,那么我将使用

ControllerContext.RouteData.Values["controller"];

这会给我 User,但我希望它是 Person(即 URL)。我怎样才能得到它?

您可以通过以下代码获取控制器名称

HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();

如果您在视图中,则可以执行以下操作:

ViewContext.RouteData.Values["Controller"]

对于自定义 url,您可以定义

[Route("myApp/Person/{action?}")]
    public ActionResult View(string id)
    {
        if (!String.IsNullOrEmpty(id))
        {
            return View("ViewStudent", GetStudent(id));
        }
        return View("AllStudents", GetStudents());
    }

ControllerRequest.Url 属性 将 return 一个包含当前 url 详细信息的 Uri 对象,包括片段。

string[] segments = Request.Url.Segments;
// returns ["/", "Person/", "Detail"]

string value = segments[1].Remove(segments[1].Length - 1);;
// returns "Person"