Кодировка URL MVC3? - PullRequest
       10

Кодировка URL MVC3?

6 голосов
/ 18 июля 2011

ASP.NET MVC3 / Razor.

Я обнаружил, что когда я создаю ссылку действия, скажем, вот так:

@Html.ActionLink(product.Title, "Detail", "Products", new { id = product.ProductID }, null)

Механизм MVC3 создает ссылку на мой продукт.Например:

http://myhost/{ActionUrl}/PRODID

Однако, если бы мой идентификатор продукта содержал какой-либо специальный символ, он не был бы закодирован в URL.

http://myhost/{ActionUrl}/PROD/ID

Конечно, это нарушает мою маршрутизацию.Мои вопросы:

  1. Должен ли я ожидать, что он будет автоматически кодировать значения URL?Есть ли способ установить это?
  2. Если нет, то каков наиболее чистый способ их кодирования и декодирования?Я действительно не хочу делать это на каждом контроллере.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 18 июля 2011

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

1 голос
/ 22 декабря 2011

Я не получил, чтобы это работало в пути, но чтобы заставить это работать как параметр QueryString, как @Darin указал здесь, код:

@Html.ActionLink(product.Title, "Detail", "Products", new { id = product.ProductID }, "")

создал actionLink как строку запроса длямне так: Products/Detail?id=PRODUCTID

мой маршрут в Global.asax.cs выглядел так:

    routes.MapRoute(
        "ProductDetail",
        "Products/Detail",
        new { controller = "Products", action = "Detail" }
        );

В моем ProductController:

public ActionResult Detail(string id)
{
    string identifier = HttpUtility.HtmlDecode(id);
    Store.GetDetails(identifier);
    return RedirectToAction("Index", "Home");
}
...