路由系统之URL模式(1)

您所在的位置:网站首页 url模式匹配字符串的原则 路由系统之URL模式(1)

路由系统之URL模式(1)

2024-05-24 19:56| 来源: 网络整理| 查看: 265

路由系统由一组路由来实现它的功能,这些路由共同组成了应用程序的URL架构。 让每一条路由都包含一个URL模式,用它与输入的URL进行比较,如果该模式与这个URL匹配,那么它便被路由系统用来对这个URL进行处理。

URL可以分成几个片段,除主机名和查询字符串之外,这些URL的组成部分都用"/“字符进行分割。 如:http://mysite.com/Admin/Index 此示例中,URL中有两个片段: 1.第一个片段包含单词"Admin” —>控制器(Controller) 2.第二个片段包含单词"Index" —>动作方法(Action) 对应的URL模式: {controller}/{action}

当处理一个输入请求时,路由系统的工作是将这个请求URL与一个模式进行匹配,然后从此URL为这个模式中定义的片段变量提取出相应的值。

所谓"与一个模式匹配":一个MVC程序通常会有几条路由,而路由系统会把输入的URL逐一与每条路由的URL模式进行相比较,直到能找到一条匹配的路由为止。

在App_Start文件下的RouteConfig.cs文件中配置了具体的路由规则: 用MapRoute方法注册一个简单的路由:

routes.MapRoute( name:"MyRoute", url: "{controller}/{action}" );

在这里插入图片描述 controller -->匹配User action—>匹配Login

定义默认值: 如果请求的URL为:http://localhost:60506/User,会报错: 在这里插入图片描述 因为没有可以匹配的路由,URL模式是保守的,只匹配指定片段数的URL.

当URL不包含与一个片段匹配的值时,便可以使用默认值

routes.MapRoute( name:"MyRoute", url: "{controller}/{action}", defaults:new {action="Login"}, );

此路由可以匹配单片段和URL,当处理单片段的URL时,路由系统将从唯一的URL片段中提取出controller值,并对action变量使用默认值。 所以可以请求http://localhost:60506/User,并调用User控制器上的Login动作方法。

可以进一步,定义不含任何变量的URL,只依靠默认值来标识controller和action:

defaults:new { controller="User", action="Login"},

输入URL:http://localhost:60506 在这里插入图片描述 定义自定义片段变量:

routes.MapRoute( name:"MyRoute", url: "{controller}/{action}/{id}", defaults:new { controller="User", action="Login",id="default"}, );

该路由的URL模式定义了标准的controller和 action,以及一个自定义变量"id" id实际上就是一个路由参数,在后台可以使用RouteData.Values属性获取.

在User控制器中,添加CustomVariable动作方法: 使用ViewBag传递几个参数值给对应的view

public ActionResult CustomVariable() { //给对应的View视图传递参数 ViewBag.Controller = "User"; ViewBag.Action = "CustomVariable"; ViewBag.CustomVariable = RouteData.Values["id"];//获取路由参数 return View(); }

在View文件夹下的User子目录下,添加CustomVariable动作方法对应的view: CustomVariable.cshtml.

@{ Layout = null; } CustomVariable //获取Action动作方法传递的参数 The controller is:@ViewBag.Controller The action is:@ViewBag.Action The custom variable is:@ViewBag.CustomVariable

Result: 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3