如何创建特定的URL路由

时间:2014-05-11 05:52:41

标签: asp.net-mvc

我有一个网店。我有一些控制器和视图来匹配/ Admin / Index,/ Admin / ShowProducts等所有东西。

我希望能够创建一个始终相同的“自定义”网址,它应该位于我的域的根目录中,如下所示:

www.mydomain.com/shop/myproduct

商店是静态的并且不会改变,并且“myproduct”根据每个产品而变化(它实际上是ID)。如何在不将URL中显示的控制器方法显示为默认方式的情况下执行此操作?

这是一条新路线吗?或者我可以在控制器上做某事吗?

1 个答案:

答案 0 :(得分:0)

默认的MVC路由几乎已经完成了。

查看Controller =和Action =

所以建立一个像:

这样的网址

/店铺/ {ID}

Controller = ShoppingController,Action = Shop

注意我添加了一个假设,即用户不必指定产品,并且您得到一些字符串告诉您它是默认产品,您也可以使用UrlParameter.Optional,您将获得null

您的控制器将如下所示:

public class ShoppingController : Controller
{
    public ActionResult Shop(string id)
    {
        if (string.IsNullOrEmpty(id) || string.Equals(id, "DefaultProduct", StringComparison.OrdinalIgnoreCase))
        {
            // Do something to please the user
        }

        // Get product by id

        return View();
    }
}

路由代码:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Shopping",
            url: "shop/{id}",
            defaults: new { controller = "Shopping", action = "Shop" , id = "DefaultProduct" }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }