ASP.NET MVC 路由? // UrlParamter.Optional 对比空字符串
ASP.NET MVC Routing? // UrlParamter.Optional Vs Empty String
这两条路线的实际区别是什么?
&
这两条路线是一样的吗?
//Route 1.
routes.MapRoute("SampleRounteOne" , "{controller}/{action}/{id}" , new {id = UrlParamter.Optional})
//Route 2.
routes.MapRoute("SampleRounteTwo" , "{controller}/{action}/{id}" , new {id = ""})
理论上来说:
在 Route1
中,您有一个声明为 UrlParameter.Optional
的参数,例如,它是 optional.
在 Route2
中,您的参数默认设置为 ""
,这是一个空字符串。
实际来说:
在 Route1
上,您的参数将为 Nullable
,因此当您将其传递给控制器时,默认值为 null
。
所以你会有这样的实现:
public void MyController(string? id)
{
//dowork
}
在 Route2
上,您的参数将是非 Nullable
类型,默认情况下,它在您的控制器上的值为 ""
,一个空的 string
.
在这种情况下,您的控制器将如下所示:
public void MyController(string id = "")
{
//dowork
}
不对!这两个路由不一样
//Route1
route.MapRoute("Route1" , "{controller}/{action}/{id}" , new { id = UrlParameter.Optional});
同样的事情也可以通过将 id 设置为空字符串来完成:{ id : ""}
例如:
//Route 2.
routes.MapRoute("Route2" , "{controller}/{action}/{id}" , new {id = ""})
这看起来很多short/breif,为什么我们不用这个呢?
有什么区别?
第一件事:
你问:这两条路线是一样的吗?
没有!这两条路线不一样。
现在进入正题!
这两条路线的实际区别是什么?
当我们键入 URL 参数时,值会从 URL 中解析出来并放入字典中?
现在,当我们使用 UrlParameter.Optional 作为默认值并且 URL 中未提供任何值时,路由甚至不会向字典中添加条目。如果默认值设置为空字符串,则路由值字典将包含一个具有键 "id" 且值为空字符串的值。在某些情况下,这种区别很重要,它可以让您了解 id 未指定与已指定但留空之间的区别。
这两条路线的实际区别是什么?
&
这两条路线是一样的吗?
//Route 1.
routes.MapRoute("SampleRounteOne" , "{controller}/{action}/{id}" , new {id = UrlParamter.Optional})
//Route 2.
routes.MapRoute("SampleRounteTwo" , "{controller}/{action}/{id}" , new {id = ""})
理论上来说:
在 Route1
中,您有一个声明为 UrlParameter.Optional
的参数,例如,它是 optional.
在 Route2
中,您的参数默认设置为 ""
,这是一个空字符串。
实际来说:
在 Route1
上,您的参数将为 Nullable
,因此当您将其传递给控制器时,默认值为 null
。
所以你会有这样的实现:
public void MyController(string? id)
{
//dowork
}
在 Route2
上,您的参数将是非 Nullable
类型,默认情况下,它在您的控制器上的值为 ""
,一个空的 string
.
在这种情况下,您的控制器将如下所示:
public void MyController(string id = "")
{
//dowork
}
不对!这两个路由不一样
//Route1
route.MapRoute("Route1" , "{controller}/{action}/{id}" , new { id = UrlParameter.Optional});
同样的事情也可以通过将 id 设置为空字符串来完成:{ id : ""}
例如:
//Route 2.
routes.MapRoute("Route2" , "{controller}/{action}/{id}" , new {id = ""})
这看起来很多short/breif,为什么我们不用这个呢?
有什么区别?
第一件事:
你问:这两条路线是一样的吗?
没有!这两条路线不一样。
现在进入正题!
这两条路线的实际区别是什么?
当我们键入 URL 参数时,值会从 URL 中解析出来并放入字典中?
现在,当我们使用 UrlParameter.Optional 作为默认值并且 URL 中未提供任何值时,路由甚至不会向字典中添加条目。如果默认值设置为空字符串,则路由值字典将包含一个具有键 "id" 且值为空字符串的值。在某些情况下,这种区别很重要,它可以让您了解 id 未指定与已指定但留空之间的区别。