如何使用 asp.net MVC 路由实现类似的 URL



我正在学习MVC ASP.NET,URL路由似乎是整个MVC中非常艰难的一章。我阅读了许多博客文章和许多其他 SO 问题,但没有一个有助于理解路由的各个方面。

我想要一个喜欢 www.sitename.com/controller/action/username/userid 的网址。如何使用 MVC 路由执行此操作?涵盖其各个方面的详细答案将非常有帮助。

1. 使用传统的基于约定的路由

更新路由注册以包含此新的 URL 模式。请确保在注册默认路由注册之前执行此操作。

所以在你的路由配置文件中

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 个参数(。这意味着,如果您有 2 个控制器,它们都有一个带有 userName 和 userId 参数的操作方法,则根据请求 URL 中的控制器和操作方法名称,将返回相应的方法。

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}时,返回来自Home控制器的详细信息操作方法的响应。(这非常具体,因为我们定义了特定的控制器名称和操作名称(

这是一篇关于 MVC 属性路由的官方文章 ASP.NET 在大多数情况下就足够了。有时,在高级方案中,您需要在 Global.asax/Bootstrapper 中配置路由。

基本上它看起来像:

[RoutePrefix("Controller")]
public class Controller : Controller
{
     [Route("action/{username}/{userid:int}")]
     public ActionResult Action(string username, int userid){}
}

我从内存中这样做,所以它可能不完全正确,请参阅该链接中的文档以及 MSDN 上的内容。

最新更新