• Как правильно настроить URL в ASP.Net MVС?

    wkololo_4ever
    @wkololo_4ever
    1)

    localhost/ProductList/Product/1

    routes.MapRoute(
                "Product",                                         
                "ProductList/Product/{productId}",                           
                new { controller = "ProductList", action = "Product"}
            );

    В контроллере "ProductList" создаете метод "Product", который принимает параметр "productId". В него MVC замапит переданный id продукта из урл localhost/ProductList/Product/{productId}.

    localhost/ProductList/notebook

    routes.MapRoute(
                "ProductList",                                         
                "ProductList/{categoryName}",                           
                new { controller = "ProductList", action = "Category",}  
            );


    В контроллере "ProductList" создаете метод "Category", который принимает параметр "categoryName". В него MVC замапит переданный название категории из урл localhost/ProductList/{categoryName}.

    2)
    Есть ли возможность привести URL на странице продукта к виду localhost/ProductList/notebook/1, а затем к localhost/ProductList/notebook/[ЧПУ_ноутбука] (ЧПУ находится в БД и находится по id)?


    localhost/ProductList/notebook/1

    routes.MapRoute(
                "ProductFromId",                                         
                "ProductList/Product/{categoryName}/{productId}",                           
                new { controller = "ProductList", action = "Product"},
                new {productId = @"\d+" }
            );

    Тут "new {productId = @"\d+" }" выступает в роли ограничения, что id может быть только числом.

    localhost/ProductList/notebook/[ЧПУ_ноутбука]


    routes.MapRoute(
                "ProductFromName",                                         
                "ProductList/Product/{categoryName}/{productName}",                           
                new { controller = "ProductList", action = "ProductFromName"}
            );


    Можно совместить роуты, и определять на стороне контроллера что пришло, название продукта или id.
    PS. Роуты нужно определять начиная с самого строгого. Иначе запросы будут мапится не на те роуты.
    Ответ написан
    3 комментария