【问题标题】:ASP .NET MVC - Multi Level URL RoutingASP .NET MVC - 多级 URL 路由
【发布时间】:2016-01-07 19:16:39
【问题描述】:

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 为空/无效或使用控制器 Projects(id),则返回索引

/projects/{id?}/phase/{id?} - 如果阶段 id 为空/无效或使用控制器 Phase(id),则返回 Project(id)。

关于如何最好地设置它有什么想法吗?

谢谢, 乔

【问题讨论】:

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


    【解决方案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() 将用户送回另一条路线。

    【讨论】:

      【解决方案2】:

      解决它的一种方法是创建一个接受项目 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
      

      【讨论】:

        猜你喜欢
        • 2012-02-24
        • 1970-01-01
        • 2010-12-30
        • 2011-11-17
        • 2016-12-02
        • 1970-01-01
        • 1970-01-01
        • 2017-03-01
        • 1970-01-01
        相关资源
        最近更新 更多