Как добавить необязательный строковый литерал в URL-адрес маршрута? - PullRequest
0 голосов
/ 04 февраля 2011

Я пытаюсь добавить необязательный параметр в конце 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} необязательным или мне нужно использовать два маршрута для этого?

1 Ответ

1 голос
/ 04 февраля 2011

Вы можете оставить разделитель и установить формат как необязательный или установить его по умолчанию, если вам нужно значение во всех случаях.Это похоже на маршрут по умолчанию:

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

Поскольку сегмент format не обрабатывает ничего, поэтому он может быть необязательным.Если бы после этого было что-то не необязательное и без значения по умолчанию, всегда нужно указывать format.Но в вашем случае format является последним сегментом.

Определите его как необязательный параметр (что означает, что вы ничего не получите в своем действии, когда формат не будет указан) или присвойте ему значение по умолчанию (котороеозначает, что вы всегда получите что-то, даже если ничего не будет указано).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...