2011-02-03 40 views
0

我想在URL的末尾添加一个可选参数来指定格式。理想情况下,它会这样工作:如何在路由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

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

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

由于没有什么程序format段,因此,可以选配。如果有些事情是非可选的并且之后没有默认的话,那么总是需要指定format。但在你的情况下,format是最后一部分。

将它定义为一个可选参数(这意味着当格式不被指定时你将不会得到任何东西)或给它一个默认值(这意味着即使没有指定任何东西,你也会得到一些东西)。

相关问题