ASP .NET MVC - 多级URL路由

时间:2016-01-07 19:16:40

标签: c# asp.net asp.net-mvc asp.net-mvc-5

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),则返回Project(id)。

关于如何最好地设置它的任何想法?

谢谢, 乔

2 个答案:

答案 0 :(得分:1)

我不是路线专家,但这应该有效:

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()将用户发送回另一条路线。

答案 1 :(得分:0)

解决这个问题的一种方法是创建一个接受项目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 ...
  }
}

实际网址将是这样的

http://mydomain/Project/CheckID/1/2