URLEncode не работает в браузере MVC - PullRequest
0 голосов
/ 03 июля 2018

Привет, мой кодированный URL-путь, который мне нужно передать в браузере, должен быть таким, как показано ниже

https://localhost:44384/part-lookup/all/gmc/1973/p25%2fp2500+van/base/41l-l6

но браузер конвертирует этот URL в путь ниже, и из-за этого я получаю 404 ошибку

https://localhost:44384/part-lookup/all/gmc/1973/p25/p2500+van/base/41l-l6

Мой объявленный путь маршрутизации - как показано ниже

routes.MapRoute(
          name: "ShopByCateShopNow",
          url: "part-lookup/{category}/{make}/{year}/{models}/{submodel}/{engine}",
          defaults: new { controller = "Home", action = "ShopNow" }
        );

Здесь фактическое значение подмодели как «P25 / P2500 VAN», и после кодирования этого значения оно преобразуется в значение «p25% 2fp2500 + van», из-за которого оно не перенаправляется должным образом и показывает ошибку 404.

Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

%2F является символом пути HTML. Если вы хотите рассматривать это как данные, вам придется кодировать их самостоятельно. Или создайте путь, который имеет другой уровень между моделью и подмоделью, и повторно объедините их в контроллере.

routes.MapRoute(
          name: "ShopByCateShopNow",
          url: "part-lookup/{category}/{make}/{year}/{modelprefix}/{modelsuffix}/{submodel}/{engine}",
          defaults: new { controller = "Home", action = "ShopNowPrefixSuffix" }
        );

После объединения в контроллере вы можете вызвать тот же метод, который отображается в вашем действии ShopNow с models = $"{modelprefix}/{modelsuffix}" или аналогичным.

0 голосов
/ 03 июля 2018

В вашем контроллере вы можете использовать Request.Path.ToString(), чтобы получить настоящий путь. Это будет включать p25%2fp2500+van, поэтому вы можете использовать

var url = Request.Path.ToString();
var model = url.Split('/')[4];

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

...