MVC действие контроллера с параметром url - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть действие GET в контроллере, и оно должно принять параметр. Это для редактирования, поэтому я передаю идентификатор (типа Guid) действию.

В настоящее время мой URL выглядит как

controller/Edit?ItemId=<Guid>

Есть ли способ сделать URL выглядят немного красивее, как это?

controller/Edit/<Guid>

Моя подпись действия:

public ActionResult Edit(Guid ItemId)

Мой маршрут:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Ответы [ 3 ]

0 голосов
/ 21 апреля 2020

Вы должны добавить новый маршрут до маршрута по умолчанию.

routes.MapRoute(
   "AnyName",   // Route name
   "ControllerName/Edit/{ItemId}",   // Your desired URL with ItemId
   new { controller = "ControllerName", action = "Edit" }  // Parameter defaults
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
0 голосов
/ 21 апреля 2020

Другой вариант - использовать атрибут маршрутизации:

[Route("controller/edit/{ItemId}")]
public ActionResult Edit(Guid ItemId)
{ }

, а затем включить его при регистрации маршрутов:

routes.MapMvcAttributeRoutes();
0 голосов
/ 21 апреля 2020

Да, указав [FromRoute] в подписи действия, вы должны это сделать. Я имею в виду

public ActionResult Edit([FromRoute]Guid id)

. В этом случае переменная id будет содержать <Guid> часть controller/Edit/<Guid> URL.

Важно, чтобы имя параметра id должно совпадать с именем параметра маршрута {id} в отображении.

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