我正在尝试在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" });
我想用一个路由定义来做这个。我知道您可以添加"Details/{id}{format}, new { format = UrlParameter.Optional}
之类的可选网址段;但是,不允许您有两个未被文字字符分隔的路径段。有没有办法使.{format}
可选或我需要使用两条路线来完成此任务?
答案 0 :(得分:1)
如果在所有情况下都需要值,可以保留分隔符并将格式设置为可选,或将其设置为默认值。它类似于默认路线:
routes.MapRoute(
"OptionalFormat",
Details/{id}.{format},
new { controller = "Person", action = "Details", format = UrlParameter.Optional /* or "xml" */ }
);
由于没有任何进展format
段,因此它可以是可选的。如果之后存在非可选且没有默认值的内容,则始终必须指定format
。但在您的情况下,format
是最后一段。
将其定义为可选参数(这意味着当未指定格式时,您将无法获得任何操作)或给它一个默认值(这意味着即使没有指定任何内容,您也总会得到一些东西)