我正在学习ASP.NET MVC和URL路由似乎是整个MVC中非常艰难的一章。我阅读了许多博客文章和许多其他SO问题,但他们都没有帮助理解路由的每个方面。如何通过asp.net MVC路由实现类似的URL?
我想要一个URL喜欢www.sitename.com/controller/action/username/userid。我怎样才能做到这一点与MVC路由?涵盖每个方面的详细答案将非常有帮助。
我正在学习ASP.NET MVC和URL路由似乎是整个MVC中非常艰难的一章。我阅读了许多博客文章和许多其他SO问题,但他们都没有帮助理解路由的每个方面。如何通过asp.net MVC路由实现类似的URL?
我想要一个URL喜欢www.sitename.com/controller/action/username/userid。我怎样才能做到这一点与MVC路由?涵盖每个方面的详细答案将非常有帮助。
This是关于ASP.NET MVC的官方文章属性对于大多数情况下的路由就足够了。有时在高级场景中,您需要在Global.asax/Bootstrapper中配置路由。
基本上它看起来像:
[RoutePrefix("Controller")]
public class Controller : Controller
{
[Route("action/{username}/{userid:int}")]
public ActionResult Action(string username, int userid){}
}
我这样做,从内存中,因此它可能不是完全正确,请参阅文件中该链接,什么是MSDN上。
1.使用传统的基于约定的路由
更新您的路线注册,包括这个新的URL模式。确保在注册默认路由注册之前执行此操作。
所以在你RouteConfig文件
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{userName}/{userId}",
defaults: new { controller = "Home", action = "Details" }
);
routes.MapRoute(
name: "Default2",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
这将路线所有URL模式到相应的控制器的操作方法(与2个参数)相匹配的请求。这意味着,如果您有两个控制器,两个控制器都拥有基于请求url中的控制器&操作方法名称的具有userName和userId参数的操作方法,则会返回相应的方法。
2.属性路由
public class HomeController : Controller
{
[Route("Home/Details/{userName}/{userId}")]
public ActionResult Details(string userName,int userId)
{
return Content("Details : "+userName + userId);
}
}
在这里,我们注册时请求的URL是Home/Details/{userName}/{userId}
,从返回首页控制器的详细操作方法的响应,其表示,新航线。 (这是非常具体的,因为我们定义了具体的控制器名称和动作名称)