Asp.net mvc 不使用全名调用控制器

Asp.net mvc 不使用全名调用控制器,asp.net-mvc,controller,Asp.net Mvc,Controller,我是ASP.NET MVC新手。我们创建了一个类似于“AdminController”的控制器,但只使用Admin的名称来调用它。ASP.NET MVC如何处理我们不需要使用全名调用控制器的问题?这是由ASP.NET MVC框架使用路由处理的。我们在Global.aspx.cs中定义路由。路由定义了要调用的控制器以及要对给定url执行的操作,例如 routes.MapRoute( "Default", // Route name "

我是ASP.NET MVC新手。我们创建了一个类似于“AdminController”的控制器,但只使用Admin的名称来调用它。ASP.NET MVC如何处理我们不需要使用全名调用控制器的问题?

这是由ASP.NET MVC框架使用路由处理的。我们在Global.aspx.cs中定义路由。路由定义了要调用的控制器以及要对给定url执行的操作,例如

routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new {controller = "Home", action = "Index", id = ""}
                );

此外,Asp.net MVC更喜欢约定而不是配置。因此,按照惯例,“Home”表示HomeController。

您在URL中指定的控制器名称与类名不同,正如操作名称与控制器上的实际方法不同一样。控制器/操作和类/方法之间存在内部映射,MVC在确定需要执行哪些代码时会执行这些映射

通用映射规则是:

  • 对于控制器,获取控制器名称(
    Admin
    )并向其添加后缀
    controller
    ,然后搜索具有此名称的类(
    AdminController
  • 对于操作,获取操作的名称(
    Details
    )并在控制器上搜索具有相同名称的方法(
    ActionResult Details(){}
但是,目前MVC支持通过属性将操作显式映射到具有不同名称的方法。因此,您可以有一个名为
Edit
的操作,该操作映射到一个方法
ActionResult EditUser(){}

MVC的未来版本可能还会添加一个类似的
ControllerName
属性,该属性允许将特定的控制器名称显式映射到特定的类。(事实上,我希望他们这样做,以帮助解决在不同区域提供相同控制器名称的不同实现的问题)