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 指向同一个控制器的主要内容,如果未能解决你的问题,请参考以下文章
将多个参数从 ajax post 传递到 asp.net mvc 控制器
将 POST 请求从 asp.net 核心控制器转发到不同的 URL
如何在 asp.net mvc 控制器中处理 *** 的问题 url?