2017-02-12 76 views
-3

我正在学习ASP.NET MVC和URL路由似乎是整个MVC中非常艰难的一章。我阅读了许多博客文章和许多其他SO问题,但他们都没有帮助理解路由的每个方面。如何通过asp.net MVC路由实现类似的URL?

我想要一个URL喜欢www.sitename.com/controller/action/username/userid。我怎样才能做到这一点与MVC路由?涵盖每个方面的详细答案将非常有帮助。

回答

0

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

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},从返回首页控制器的详细操作方法的响应,其表示,新航线。 (这是非常具体的,因为我们定义了具体的控制器名称和动作名称)