MVC 5 中的属性路由
在 MVC 5 之前,您可以通过在 RouteConfig.cs 文件中调用 routes.MapRoute(...) 将 URL 映射到特定的操作和控制器。这是存储主页 url 的位置 (Home/Index)。但是,如果您如下所示修改默认路由,
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
请记住,这会影响其他操作和控制器的 URL。例如,如果您有一个名为 ExampleController 的控制器类和一个名为 DoSomething 的操作方法,那么预期的默认 URL ExampleController/DoSomething 将不再有效,因为默认路由已更改。
解决方法是不要弄乱默认路由,并在 RouteConfig.cs 文件中为其他操作和控制器创建新路由,
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Example",
url: "hey/now",
defaults: new { controller = "Example", action = "DoSomething", id = UrlParameter.Optional }
);
现在ExampleController 类的DoSomething 操作将映射到url hey/now。但是,每次您想为不同的操作定义路线时,这都会变得乏味。因此,在 MVC 5 中,您现在可以添加属性以将 url 与类似的操作相匹配,
public class HomeController : Controller
{
// url is now 'index/' instead of 'home/index'
[Route("index")]
public ActionResult Index()
{
return View();
}
// url is now 'create/new' instead of 'home/create'
[Route("create/new")]
public ActionResult Create()
{
return View();
}
}