我可以从站点地图生成ASP.NET MVC路由吗?
我正在考虑为即将到来的项目学习ASP.NET MVC框架。我可以使用高级路由根据站点地图层次结构创建长网址吗?
导航路径示例:
首页>商店>产品>家用>厨房>炊具>炊具>不粘锅
典型(我认为)的MVC URL:
http://example.com/products/category/NonstickCooksets
所需网址:
http://example.com/shop/products/household/kitchen/cookware/cooksets/nonstick
我可以这样做吗?
解决方案
回答
MVC路由使我们几乎可以定义所需的任何结构,只需要定义每个部分在语义上的含义即可。我们可以使用诸如"商店/产品"之类的"硬编码"位,然后将其余部分定义为变量" {category} / {subcategory} / {speciality}"等。
如果愿意,我们还可以定义多条路线,所有路线都映射到同一终点。基本上,当URL进入MVC应用程序时,它将遍历路由表,直到找到匹配的模式,然后填充变量并将请求传递给适当的控制器进行处理。
尽管默认路由是简单的Controller,Action和Id类型的设置,但这当然不是我们可以做的事情。
回答
Zack,如果我理解正确,那么我们想要无限的子类别深度。没什么大不了的,因为MVC Preview 3(我认为是3或者4)已经解决了。
只需定义一条路线即可
" {controller} / {action} / {* categoryPath}"
用于以下网址:
http://example.com/shop/products/household/kitchen/cookware/cooksets/nonstick
我们应该有一个带有Products动作的ShopController:
public class ShopController : Controller { ... public ActionResult Products(string categoryPath) { // the categoryPath value would be // "household/kitchen/cookware/cooksets/nonstick". Process it (for ex. split it) // and then decide what you do.. return View(); }