猿教程 Logo

MVC路由

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买

在ASP.NET Web窗体应用程序中,每个URL必须与特定的.aspx文件相匹配。 例如,URL http://domain/studentsinfo.aspx必须与包含用于向浏览器呈现响应的代码和标记的studentinfo.aspx文件相匹配。

ASP.NET引入了路由以消除使用物理文件映射每个URL的需要。 路由使我们能够定义映射到请求处理程序的URL模式。 此请求处理程序可以是文件或类。 在ASP.NET Webform应用程序中,请求处理程序是.aspx文件,在MVC中,它是Controller类和Action方法。 例如,http:// domain / students可以映射到ASP.NET Webforms中的http://domain/studentsinfo.aspx,并且相同的URL可以映射到MVC中的Student Controller和Index操作方法。


路线:

Route定义了URL模式和处理程序信息。 存储在RouteTable中的应用程序的所有已配置路由,将由路由引擎用于为传入请求确定适当的处理程序类或文件。

下图说明了路由过程。



配置路由:

每个MVC应用程序必须配置(注册)至少一个路由,默认情况下由MVC框架配置。 您可以在RouteConfig类中注册一个路由,它在RouteConfig.cs中的App_Start文件夹下。 下图说明了如何在RouteConfig类中配置路由。


如上图所示,路由使用RouteCollection的MapRoute()扩展方法配置,其中name是“Default”,url pattern是“{controller} / {action} / {id}”,defaults参数为 控制器,Action方法和id参数。 默认值指定如果传入请求URL不存在于路由配置中时应使用哪个控制器,操作方法或值。

同样,您可以使用RouteCollection的MapRoute方法配置其他路由。 这个RouteCollection实际上是RouteTable类的一个属性。

URL模式:

仅在URL中的域名部分之后才需要考虑URL模式。 例如,URL模式“{controller} / {action} / {id}”将类似localhost:1234 / {controller} / {action} / {id}。 “localhost:1234 /”之后的任何内容将被视为控制器名称。 同样的,控制器名称之后的任何内容都将被视为Action名称,然后是id参数的值。


如果URL在域名后不包含任何内容,则将使用默认控制器和操作方法来处理请求。 例如,http:// lcoalhost:1234将由HomeController的Index方法处理,正如defaults参数中所配置。

下表显示参考上述默认路由,哪些Controller,Action方法和Id参数将处理不同的URL。

网址控制器行动ID
http:// localhost / homeHomeControllerindex空值
http:// localhost / home / index / 123HomeControllerindex123
http:// localhost / home / aboutHomeControllerabout空值
http:// localhost / home / contactHomeControllercontact空值
http:// localhost / studentStudentControllerindex空值
http:// localhost / student / edit / 123StudentControlleredit123

多个路由:

您还可以使用MapRoute扩展方法配置自定义路由。 您需要在MapRoute中至少提供两个参数,路由名称和url模式。 Defaults参数是可选的。

您可以注册具有不同名称的多个自定义路由。 参考下面的例子,我们注册了“Student”路由。

相关实例:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Student",
            url: "students/{id}",
            defaults: new { controller = "Student", action = "Index"}
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

如上面的代码所示,Student路由的URL模式是students / {id},它指定以domainName / students开头的任何URL必须由StudentController处理。 注意,我们没有在URL模式中指定{action},因为我们希望每个以student开头的URL都应该使用StudentController的Index操作。 我们已经指定了默认控制器和操作来处理从domainName / students开始的任何URL请求。

MVC框架按顺序评估每个路由。 它从第一个配置的路由开始,如果传入的URL不满足路由的URL模式,那么它将评估第二个路由,等等。 在上面的例子中,路由引擎将首先评估Student路由,如果传入的URL不以/Students开始,那么它将只考虑第二路由,它是默认路由。

下表显示不同的网址将如何映射到学生路由:

网址控制器行动ID
http:// localhost / students / 123StudentControllerindex123
http:// localhost / students / index / 123StudentControllerindex123
http:// localhost / students?Id = 123StudentControllerindex123

路由约束:

您还可以通过配置路由约束对参数值应用限制。 例如,以下路由对id参数应用限制,即id的值必须为numeric。

相关实例:

routes.MapRoute(
        name: "Student",
        url: "student/{id}/{name}/{standardId}",
        defaults: new { controller = "Student", action = "Index", id = UrlParameter.Optional, name = UrlParameter.Optional, standardId = UrlParameter.Optional },
        constraints: new { id = @"\d+" }
    );

因此,如果给非数字值的id参数,那么该请求将由另一个路由处理,或者如果没有匹配的路由,则将抛出“找不到资源”错误。


注册路由:

现在,在配置RouteConfig类中的所有路由之后,您需要在Global.asax中的Application_Start()事件中注册它。 现在RouteTable将包含配置的所有路由。

相关实例:

public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
              RouteConfig.RegisterRoutes(RouteTable.Routes);
        }
    }

下图说明了路由注册过程。


因此,路由在MVC框架中起着重要作用。

要点
  1. 路由在MVC框架中起着重要作用。 路由将URL映射到物理文件或类(MVC中的控制器类)。 

  2. 路由包含URL模式和处理程序信息。 网址格式在域名后面开始。 

  3. 路由可以在RouteConfig类中配置。 也可以配置多个自定义路由。 

  4. 路由约束对参数的值应用限制。 

  5. 路由必须在Global.ascx.cs文件中的Application_Start事件中注册。

在下一节中了解控制器。

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/mvc/mvc-routing.html