asp.net 多个 url 指向同一个控制器

Posted

技术标签:

【中文标题】asp.net 多个 url 指向同一个控制器【英文标题】:asp.net multiple urls pointing to same controller 【发布时间】:2012-02-22 06:26:25 【问题描述】:

我在一个社交网站上工作,我们在其中实施个人资料、页面、组等。在这个阶段,我们正在处理个人资料和页面。他们都有墙,用户可以在其中放置一些状态、图片等,更像是 facebook 墙。

现在可以通过两个不同的 url 访问控制器 WallController。

www.mysite.com/profile/121/some-user/wall
and
www.mysite.com/page/222/some-page/wall

在页面的左侧,我加载了一些基本信息(名称等)和一个菜单。 说

www.mysite.com/profile/121/some-user/photos
www.mysite.com/profile/121/some-user/videos
www.mysite.com/profile/121/some-user/songs

这适用于(页面和个人资料)。

这是我的页面路线

   routes.MapRoute(
           "Page-wall", // Route name
           "page/id/name/wall", // URL with parameters
           new  controller = "wall", action = "details", id = "", name = "" ,
           new  id = @"\d+" ,
           new string[]  "PagesNameSpace.Controllers"  // Parameter defaults
           );

对于个人资料

      routes.MapRoute(
           "profile-wall", // Route name
           "profile/id/name/wall", // URL with parameters
           new  controller = "wall", action = "details", id = "", name = "" ,
           new  id = @"\d+" ,
           new string[]  "ProfileNameSpace.Controllers"  // Parameter defaults
           );

现在,问题是,我必须确定正在访问 url 的对象。这是我的 WallController

public class WallController : Controller

     public ActionResult Details(long id, string name)
     

        return View(LoadWallData(id));
     


我认为路由值字典是一种解决方案,但想看看这种情况下的最佳解决方案是什么。

我们将不胜感激。

问候 帕尔米德

【问题讨论】:

【参考方案1】:

我可能会执行以下操作,您只需将值添加到您的路线中:

更换你的控制器:

public class WallController : Controller

     public ActionResult Details(long id, string name, string obj)//added param
     

        return View(LoadWallData(id));
     

然后是你的路线:

routes.MapRoute(
           "Page-wall", // Route name
           "page/id/name/wall", // URL with parameters
           new  controller = "wall", action = "details", id = "", name = "",
                                                   /*See this>>>> */ obj="page",
           new  id = @"\d+" ,
           new string[]  "PagesNameSpace.Controllers"  // Parameter defaults
           );

routes.MapRoute(
           "profile-wall", // Route name
           "profile/id/name/wall", // URL with parameters
           new  controller = "wall", action = "details", id = "", name = "",
                                             /*See this>>>> */ obj="profile" ,
           new  id = @"\d+" ,
           new string[]  "ProfileNameSpace.Controllers" 
           );

【讨论】:

【参考方案2】:

使用((System.Web.Routing.Route)(Url.RequestContext.RouteData.Route)).Url,您可以从 MapRoute 获取带有参数值的 URL。

【讨论】:

【参考方案3】:

我觉得,我会采用这种方法。

public class WallController : Controller

 public ActionResult Details(string type ,long id, string name)//added param
 

    return View(LoadWallData(id));
 
 

还有我的路线

routes.MapRoute(
       "wall-default", // Route name
       "type/id/name/wall", // URL with parameters
       new  controller = "wall", action = "details", id = "", name = "",
                                                               type="profile",
       new  id = @"\d+" ,
       new string[]  "PagesNameSpace.Controllers"  // Parameter defaults
       );

现在只需传递类型参数,我就可以获得页面和配置文件的操作链接。

非常感谢大家。

问候

【讨论】:

以上是关于asp.net 多个 url 指向同一个控制器的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC Url.Action 和路由名称值

将多个参数从 ajax post 传递到 asp.net mvc 控制器

将 POST 请求从 asp.net 核心控制器转发到不同的 URL

如何在 asp.net mvc 控制器中处理 *** 的问题 url?

在 ASP.NET MVC 控制器中,如何让 Redirect(string URL) 方法不附加“#”?

ASP.Net Core WebApi几种版本控制对比