如何在路由URL中添加可选的字符串文字?

时间:2011-02-03 21:11:00

标签: routing asp.net-mvc-3

我正在尝试在url的末尾添加一个可选参数来指定格式。理想情况下,它会像这样工作:

localhost/details/42localhost/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" });

我想用一个路由定义来做这个。我知道您可以添加"Details/{id}{format}, new { format = UrlParameter.Optional}之类的可选网址段;但是,不允许您有两个未被文字字符分隔的路径段。有没有办法使.{format}可选或我需要使用两条路线来完成此任务?

1 个答案:

答案 0 :(得分:1)

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

routes.MapRoute(
    "OptionalFormat",
    Details/{id}.{format},
    new { controller = "Person", action = "Details", format = UrlParameter.Optional /* or "xml" */ }
);

由于没有任何进展format段,因此它可以是可选的。如果之后存在非可选且没有默认值的内容,则始终必须指定format。但在您的情况下,format是最后一段。

将其定义为可选参数(这意味着当未指定格式时,您将无法获得任何操作)或给它一个默认值(这意味着即使没有指定任何内容,您也总会得到一些东西)