Как я могу создать маршрут "{controller} / {action} / paramname / paramvalue / ...", который применим ко всем моим контроллерам? - PullRequest
3 голосов
/ 01 марта 2011

Как гласит заголовок, я бы хотел, чтобы у моих сайтов MVC был шаблон URL, такой как

/Products/Category/Books/Sku/123456

Где каждый второй сегмент URL является / name / значением имени параметра и его значения.

Как я могу это сделать?

1 Ответ

10 голосов
/ 10 марта 2011

ASP.NET маршрутизация позволяет определить catchall параметры в конце маски маршрута:

routes.MapRoute(
    "CategoryWithParameters", 
    "Products/Category/{category}/{*parameters}", 
    new { controller = "Home", action = "Index" } 
);

Итак, этот метод контроллера Home

public ActionResult Index(string category, string parameters)
{
    // slashes were ignored by routing system
    string[] parts = parameters.Split('/');

    Dictionary<string, string> values = new Dictionary<string, string>();

    // we want only keys with values 
    for (int i = 0; i < parts.Length / 2 * 2; i += 2)
        values[parts[i]] = parts[i + 1];

    ViewBag.category = category;
    ViewBag.parameters = parameters;
    ViewBag.values = values;

    return View();
}

и этотпросмотр

<p>
@ObjectInfo.Print(ViewBag.category)
</p>
<p>
@ObjectInfo.Print(ViewBag.parameters)
</p>
<p>
@ObjectInfo.Print(ViewBag.values)
</p>

рендеринг URL h ** p: // localhost: 32690 / Продукты / Категория / Книги / Sku / 123456 / Bro / 098765 / df / 34 до

rendered view

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