欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

学习ASP.NET MVC5框架揭秘笔记-ASP.NET MVC路由(三)

程序员文章站 2023-01-21 22:27:56
2.2.3缺省url参数 当通过visualstudio的asp.net mvc项目模板创建一个web应用后,它会为我们注册如下一个模板为“{controller}/...

2.2.3缺省url参数

当通过visualstudio的asp.net mvc项目模板创建一个web应用后,它会为我们注册如下一个模板为“{controller}/{action}/{id}”的默认route对象。3个路由模板均有相应额默认值。但是变量名为id的默认值为urlparameter.optional。按照字面的意思,我们将其称为可缺省url参数。那么将路由变量的默认值进行如此设置与设置一个具体的默认值有什么区别呢?

 

routes.maproute(
                name: "default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "home", action = "index", id = urlparameter.optional }
            );


 

在介绍可缺省url参数之前,我们不妨先看看urlparameter类型的定义。如下面的代码片段所示,urlparameter类型的定义。如下面的代码片段所示,urlparameter是一个不能被实例化的类型(它具有的唯一构造函数的私有的),唯一有用的就是它的静态只读字段optional。这是典型的单例模式,意味着多次注册的缺省url参数引用着同一个urlparameter对象。

 

public sealed class urlparameter
{
public static readonly urlparameter optional = new urlparameter();
private urlparameter();
public override string tostring()
{
return string.empty;
}
}


 

在进行路由解析的时候,默认值为urlparameter.optional的路由变量与其他具有默认值的路由变量没有什么区别。他们之间的不同之处在于:如果将某个定义在路由模板中的变量的默认值设置为urlparameter.optional,则只有请求url真正包含具体变量值的情况下生成的routedata的values属性中才会包含相应的路由变量。