Routing 如何在路由url中添加可选字符串文字?

Routing 如何在路由url中添加可选字符串文字?,routing,asp.net-mvc-3,Routing,Asp.net Mvc 3,我试图在url的末尾添加一个可选参数来指定格式。理想情况下,其工作原理如下: localhost/details/42和localhost/details/42.xml都指向相同的操作 目前我已经定义了这样的路线 routes.MapRoute("with_Format", "Details/{id}.{format}", new { controller = "Person", action = "Details" }); routes.MapRoute("without_forma

我试图在url的末尾添加一个可选参数来指定格式。理想情况下,其工作原理如下:

localhost/details/42
localhost/details/42.xml
都指向相同的操作

目前我已经定义了这样的路线

routes.MapRoute("with_Format", "Details/{id}.{format}", 
    new { controller = "Person", action = "Details" });
routes.MapRoute("without_format", "Details/{id}", 
    new { controller = "Person", action = "Details" });

我想用一个路由定义来实现这一点。我知道你可以添加一个可选的url段,比如
“Details/{id}{format},new{format=UrlParameter.optional}
;但是,你不允许有两个没有用文字字符分隔的路径段。有没有办法使
{format}
可选还是我需要使用两个路由来完成此操作?

您可以保留分隔符并将格式设置为可选,或者在所有情况下都需要值时将其设置为默认值。它类似于默认路由:

routes.MapRoute(
    "OptionalFormat",
    Details/{id}.{format},
    new { controller = "Person", action = "Details", format = UrlParameter.Optional /* or "xml" */ }
);
由于没有继续
format
段,因此可以选择它。如果以后有非可选的且没有默认值,则始终必须指定
format
但在您的情况下,最后一个段是
format

将其定义为一个可选参数(这意味着在不指定格式的情况下,您的操作将不会获得任何内容)或为其提供一个默认值(这意味着即使未指定任何内容,您也将始终获得某些内容)