我有一个网店。我有一些控制器和视图来匹配/ Admin / Index,/ Admin / ShowProducts等所有东西。
我希望能够创建一个始终相同的“自定义”网址,它应该位于我的域的根目录中,如下所示:
www.mydomain.com/shop/myproduct
商店是静态的并且不会改变,并且“myproduct”根据每个产品而变化(它实际上是ID)。如何在不将URL中显示的控制器方法显示为默认方式的情况下执行此操作?
这是一条新路线吗?或者我可以在控制器上做某事吗?
答案 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 }
);
}