我有一个可以通过URL访问的项目:
myapp.com/project/my-project
为了能够使用这条路线,我在Global.asax中记录了以下内容
routes.MapRoute(
"Project", // Route name
"Project/{url}/{action}", // URL with parameters
new { controller = "Project", action = "Details" } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
当你浏览网址'myapp.com / project / create'时,我想调用'create'动作,而不是我的'详细动作'。
但网址myapp.com/project/my-project
通常应由details
操作解释。
public ActionResult Details(string projectUrl)
{
var project = _projectService.Get(projectUrl);
if (project == null)
//Not found! Redirect to next route!
var model = Mapper.Map<ProjectViewModel>(project);
return View(model);
}
如何通过默认路由解释Create
,Delete
,Edit
?
答案 0 :(得分:1)
以下是您现有路线的创建路线:
routes.MapRoute(
"ProjectCreate", // Route name
"project/create", // URL with parameters
new { controller = "Project", action = "Create" } // Parameter defaults
);
routes.MapRoute(
"Project", // Route name
"project/{url}/{action}", // URL with parameters
new { controller = "Project", action = "Details" } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
您的项目网址参数名称应为url
而不是projectUrl
,因为这是路由值的名称。
这是我的ProjectController
:
public ActionResult Details(string url)
{
return View();
}
public ActionResult Create()
{
return View();
}
当我转到其中任何一个网址时,会遇到相应的操作:
并将“test”作为url值传递。
值得注意的是,路线按照添加顺序进行处理,因此您需要确保它们按顺序从最具体到最常见顺序排列,而不是逆转。