HTML.ActionLink дает разные результаты в зависимости от URL-адреса

StackOverflow https://stackoverflow.com//questions/9640054

Вопрос

У меня есть URL-адрес http://localhost:xyz/HelloWorld, который направляет к HelloWorld действие в Home контроллер.

На странице, которая отображается по URL, у меня есть Html.ActionLink, которая указывает на ту же страницу (да, ссылка на страницу, на которой вы находитесь в данный момент).

Проблема в том, что эта ссылка указывает на страницу только в том случае, если страница загружена как http://localhost:xyz/HelloWorld/ (с косой чертой в конце).Если страница загружена как http://localhost:xyz/HelloWorld (без косой черты), он указывает на Index действие Home контроллер.

Я перепробовал несколько перегрузок, но не могу понять, в чем причина этого или как это исправить.

Html.ActionLink("Hello World", "HelloWorld", "Home");
Html.ActionLink("Hello World", "HelloWorld", "Home", null, null);
Html.ActionLink("Hello World", "HelloWorld", "Home", new { arg = 0 }, null);

Все это приводит к совершенно одинаковому результату.Они прекрасно работают, если есть завершающая косая черта, и направляют на http://localhost:xyz/ если его нет.

Кто-нибудь может объяснить такое поведение или как это исправить?

РЕДАКТИРОВАТЬ (возможно, это имеет отношение к делу?):
Когда arg присутствует, а не 0, та же страница отображается по адресу http://localhost:xyz/HelloWorld/arg, и имеет ссылку "Hello World" (которая работает совершенно нормально), и аналогичную ссылку, которая работает безупречно.

Html.ActionLink("Argument", "HelloWorld", "Home", new {arg = arg}, null);

Это правильно указывает на само себя, независимо от того, присутствует ли завершающая косая черта или нет.

маршруты:

routes.MapRoute(
  "HomeStart",
  "",
  new { controller = "Home", action = "Index" }
);

routes.MapRoute(
  "Hello World",
  "HelloWorld/{arg}",
  new {controller = "Home", action = "HelloWorld", arg = ""}
);
Это было полезно?

Решение

Проблема решена.Я разделил маршруты на "с аргументом" и "без аргумента".

routes.MapRoute(
 "Hello World",
 "HelloWorld",
 new {controller = "Home", action = "HelloWorld"}
);

routes.MapRoute(
 "Hello World With Arg",
 "HelloWorld/{arg}",
 new {controller = "Home", action = "HelloWorld", arg = ""}
);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top