(19)URL—其实我更想懂你:路由用户到特定的Controller和Action
2014-03-16 16:40
260 查看
问题
当今如此对搜索引擎霸主的争夺战是如此激烈,像下边这样的网站地址很难在这场比赛中获胜:http://www.example.com/books/details?id=4
使用路由,网站可以变成这样:
http://www.example.com/20-recipes-for-mvc3
无论是对用户还是搜索引擎,这将提供更多的语境。
解决方案
使用RouteCollectionExtensions 类下的MapRoute 函数去生成更友好的名字去展示内容而不是数字ID。
讨论
在MVC中可以通过Web.config和Global.asax.cs文件设置路由。在web.config中包含 System.Web.Routing程序集并且在Global.asax.cs中使用它去对在它其中的所有controller和action创建一个默认的路由机制。因此在添加BooksController的时候,可以通过/Books 访问不带扩展名的 URL,就像在ASP.NET 官网那样。
接下来的秘方将演示设立几个不同的有用的技术去创建路由。
第一个路由将允许网站直接连接到book的title上。例如,有一本书叫MVC3的20个秘方,它可以通过http://localhost /20 Recipes for Programming MVC 3这个地址被直接访问。然而当前的解决方案就需要一个更复杂的URL就像:http://localhost/Books/Details?id=1。要开始创建这个路由,打开在MVC project里的Global.asax.cs文件。在RegisterRoutes()函数里创建里了一个默认的路由。在第一次加载网站的时候 Application_Start()函数会调用它。下边的例子包含一个更新的RegisterRoutes 函数,添加了一个新的路由到MapRoute函数中:
双击代码全选
在上边的例子里,MapRoute 函数接收4个参数。
route name,在这里是BookName。
附带任何参数的URL。在这里是{Keyword},这是可变的,一会儿会用到。
这个参数默认的是controller ,action和任何附加的变量。在这个例子里,默认的controller是Books 并且Action是Index
他包含(例如,变量)对于URL。在这里,前边提到的Keyword变量传递到BooksController的Index action上。
当搜索关键字时,他可以在URL的域名后边输入一个书名或关键字,如果仅仅返回了一个结果,用户将被重定向到详细信息页面,并看到那本书。否则用户将看到一个根据他关键字的搜索结果。在下一个例子里。一个新的路由将被创建。它将口占RouteBase类。均需一个更复杂的路由。将用一个子域名替代在域名后边输入书名。例如 http://mvc3book.localhost/ 将返回上述图书的详细内容-MVC3编程的20个秘方。
为了让这成为可能,BOOK model 需要被更新去包含一个新的参数,名为“ShortName”。 此参数将被用来作为子域,并允许书籍通过创建扩展的RouteBase类的类进行搜索。
双击代码全选
现在必须创建一个新的类将包含新的路由背后的逻辑。选择Utils文件夹中,右键单击并选择“添加→类。这个新的类将被称为 BookDomainRoute.cs。下面的类将从Request.Headers为当前HttpContext检索域名。该域名将被.”操作符的分成 “数组。执行一些错误检查以确保我们有一个子域名不是WWW。
第一块子域,例如,ShortName,是用来执行书本上表的搜索,找到特定书籍。如果查找到了书籍,创建一个新的对象类RouteData,设置 Controller为Books,Action 设置为Detail,最后的ID是这本书的ID。如果没有找到书籍,主页将显示出来。在下面的例子,它可以很容易改变以直接导航用户到一个错误页或根据 Keyword 跳转到Books/index 页(在前面的例子)。
双击代码全选
最后Global.asax.cs文件必须再次更新,包括新创建的路由。为了使新的路由类可以找到。需要添加using语句到utils目录。
双击代码全选
上述的例子包含良好的使用路由的伟大的开始。两者都可以很容易地更新执行其他路由,例如,子域名可以用来显示用户的特定的个人资料页,或以前实施的多语种秘方可更新为使用一个路由类允许象en.example.com或fr.example.com一样的URL设置当前的语言文化。
当今如此对搜索引擎霸主的争夺战是如此激烈,像下边这样的网站地址很难在这场比赛中获胜:http://www.example.com/books/details?id=4
使用路由,网站可以变成这样:
http://www.example.com/20-recipes-for-mvc3
无论是对用户还是搜索引擎,这将提供更多的语境。
解决方案
使用RouteCollectionExtensions 类下的MapRoute 函数去生成更友好的名字去展示内容而不是数字ID。
讨论
在MVC中可以通过Web.config和Global.asax.cs文件设置路由。在web.config中包含 System.Web.Routing程序集并且在Global.asax.cs中使用它去对在它其中的所有controller和action创建一个默认的路由机制。因此在添加BooksController的时候,可以通过/Books 访问不带扩展名的 URL,就像在ASP.NET 官网那样。
接下来的秘方将演示设立几个不同的有用的技术去创建路由。
第一个路由将允许网站直接连接到book的title上。例如,有一本书叫MVC3的20个秘方,它可以通过http://localhost /20 Recipes for Programming MVC 3这个地址被直接访问。然而当前的解决方案就需要一个更复杂的URL就像:http://localhost/Books/Details?id=1。要开始创建这个路由,打开在MVC project里的Global.asax.cs文件。在RegisterRoutes()函数里创建里了一个默认的路由。在第一次加载网站的时候 Application_Start()函数会调用它。下边的例子包含一个更新的RegisterRoutes 函数,添加了一个新的路由到MapRoute函数中:
route name,在这里是BookName。
附带任何参数的URL。在这里是{Keyword},这是可变的,一会儿会用到。
这个参数默认的是controller ,action和任何附加的变量。在这个例子里,默认的controller是Books 并且Action是Index
他包含(例如,变量)对于URL。在这里,前边提到的Keyword变量传递到BooksController的Index action上。
当搜索关键字时,他可以在URL的域名后边输入一个书名或关键字,如果仅仅返回了一个结果,用户将被重定向到详细信息页面,并看到那本书。否则用户将看到一个根据他关键字的搜索结果。在下一个例子里。一个新的路由将被创建。它将口占RouteBase类。均需一个更复杂的路由。将用一个子域名替代在域名后边输入书名。例如 http://mvc3book.localhost/ 将返回上述图书的详细内容-MVC3编程的20个秘方。
为了让这成为可能,BOOK model 需要被更新去包含一个新的参数,名为“ShortName”。 此参数将被用来作为子域,并允许书籍通过创建扩展的RouteBase类的类进行搜索。
第一块子域,例如,ShortName,是用来执行书本上表的搜索,找到特定书籍。如果查找到了书籍,创建一个新的对象类RouteData,设置 Controller为Books,Action 设置为Detail,最后的ID是这本书的ID。如果没有找到书籍,主页将显示出来。在下面的例子,它可以很容易改变以直接导航用户到一个错误页或根据 Keyword 跳转到Books/index 页(在前面的例子)。
相关文章推荐
- (19)URL—其实我更想懂你:路由用户到特定的Controller和Action
- 【译】MVC3 20个秘方-(19)URL—其实我更想懂你:路由用户到特定的Controller和Action
- [翻译]ASP.NET MVC 3 开发的20个秘诀(十九)[20 Recipes for Programming MVC 3]:路由用户至特定的Controller或Action
- 在ASP.NET MVC 中获取当前URL、controller、action
- 在ASP.NET MVC 中获取当前URL、controller、action(转)
- 在ASP.NET MVC 中,一个简单的例子让 URL 请求的 controller 和 action 小写
- “/”应用程序中的服务器错误。 找到了多个与名为“Home”的控制器匹配的类型。如果为此请求(“{controller}/{action}/{id}”)提供服务的路由没有指定命名空间来搜索匹配此请求的
- 如何在ASP.NET MVC 中获取当前URL、controller、action
- 在ASP.NET MVC 中获取当前URL、controller、action
- 在ASP.NET MVC 中获取当前URL、controller、action
- 在ASP.NET MVC中如何让ASCX用户控件具有Action / Controller
- 在ASP.NET MVC 中获取当前URL、controller、action
- 获取当前URL、controller、action
- 在ASP.NET MVC 中获取当前URL、controller、action
- 在ASP.NET MVC 中获取当前URL、controller、action
- 在ASP.NET MVC 中获取当前URL、controller、action(转)
- ASP.NET实现MVC中获取当前URL、controller及action的方法
- MVC前后台获取Action、Controller、ID名方法 以及 路由规则
- 【转】Laravel 深入理解路由和URL生成(使用action方法生成奇葩url的原因)
- 在ASP.NET MVC 中获取当前URL、controller、action