ASP.NET MVC Маршрутизация двух параметров со статической строкой между ними

Это мой маршрут:

routes.MapRoute(null,
    "shelves/{id1}/products/{action}/{id2}",
    new { controller = "Products", action = "List", id1 = "", id2 = ""});

Мысль в том, что вы можете сделать что-то вроде этого:

http://server/shelves/23/products/edit/14

И иметь возможность редактировать продукт 14 на полке 23. Проверяя его с помощью Route Debugger, путь совпадает с маршрутизацией, но когда я пытаюсь перейти к нему с отключенным Route Debugger, он показывает ошибку HTTP 404. Кто-нибудь знает, почему это происходит?

1 ответ

Решение

Ну, для начала, эта строка id1="" будет проблематичной, потому что вы не можете сделать что-то необязательное, чего нет в конце.

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

Это маршрут:

routes.MapRoute(
    "shelf-route",
    "shelves/{id1}/products/{action}/{id2}",
    new { controller = "Products", action = "List", id2 = "" }
);

Это контроллер:

public class ProductsController : Controller
{
    public string List(string id1, string id2)
    {
        return String.Format("ID1 = {0}, ID2 = {1}", id1, id2);
    }
}

Я пробовал URL-адреса, такие как:

HTTP: // локальный: 14314 / полки / 23 / Продукты / список / 14
Http: // Localhost: 14314 / полки / 23 / продукты

И они работали просто отлично.

Когда вы пробовали URL-адрес с надписью "изменить", вы не забыли сделать действие "Изменить"? Если нет действия Изменить, вы получите 404.

Другие вопросы по тегам