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 未指定与已指定但留空之间的区别。