ASP MVC 6(以及一般的ASP)的新手,正在寻求一些指导。
目前,我有一个默认的路由设置方式:
public void Configure(IApplicationBuilder app)
{
app.UseMvc(routes => routes.MapRoute(
"Default", "{controller=Home}/{action=Index}/{id?}"));
app.UseFileServer();
}
在我的应用程序中,我希望有几个路线:
/projects/{id?}
-如果id为空/无效或使用控制器项目(id),则返回索引
/projects/{id?}/phase/{id?}
-如果阶段id为空/无效或使用控制器阶段(id),则返回项目(id)。
有什么关于我如何最好地设置这个的想法吗?
谢谢,Joe
我不是路线专家,但这应该有效:
app.UseMVC(routes => {
routes.MapRoute(
name: "project",
url: "project/{id}",
defaults: new { id = UrlParameter.Optional, controller="Project", action="Index"});
routes.MapRoute(
name: "projectphase",
url: "project/{id}/phase/{pid}",
defaults: new { id = UrlParameter.Optional, pid=UrlParameter.Optional, controller="Phase", action="Index" });
});
对于无效/空的pid,只需使用RedirectToAction()将用户发送回其他路由即可。
解决此问题的一种方法是创建一个同时接受项目ID和短语ID的路由,然后在任何控制器中执行该条件
在routeConfig.cs中,创建一个新路由:
routes.MapRoute(
name: "MyCustomRoute",
url: "{controller}/{action}/{projectID}/{phraseID}",
defaults: new { controller = "Home", action = "Index", projectID = UrlParameter.Optional, phraseID= UrlParameter.Optional }
);
例如,您有一个名为project的控制器
public ActionResult CheckID(int projectID, int phraseID) {
ViewBag.projectID= projectID;
ViewBag.phraseID= phraseID;
if (...check my projectID is valid...) {
... return to your project view ...
} else {
... return to your phrase view ...
}
}
实际的URL应该类似于这个
http://mydomain/Project/CheckID/1/2