----------------------------------------------------------
原则:1.应该首先定义最具体的路由。
2.建议为URL模式中的所有片段变量都提供值。
注意:1.Html.ActionLink在匹配时,前有打断原则(前面提供值后,后面的变量必须提供值,打断默认值链)
@Html.RouteLink方法,指定一条路由生成链接(路由name)
2.在参数传递给ActionLink方法时,注意将其余变量值传递null。
3.在区域下面的Web.config中,把<add namespace="System.Web.Optimization"/>去掉
提示:1.为了使用保留关键字时,要在前面加@符号,如:new{id="Myid",@class="MyCssClass"}
2.Html.ActionLink 用于生成a标签的链接,Url.Action用于生成URL文件并非链接
* 使用URL方案来生成可以嵌入到视图中的输出URL,以便用户可以点击链接,
并以正确的控制器和动作方法为目标,将表单递给应用程序。(真TM废话,就是用Html.ActionLink等方法生成正确的链接。)
----------------------------------------------------------
目录:
在视图中生成输出URL
定制路由系统
使用区域
URL方案最佳做法
一.出站URL的路由匹配:
1.考察路由匹配的三个条件:
(1)URL模式中定义的每一个片段变量都必须有一个可用的值。
(2)在给片段变量提供的值中,应当没有违背这条路由所定义的未出现的默认变量
(Default-Only Variables为其提供了默认值,但未在URL模式中出现的变量)的值。(与默认变量)
(3)所有片段变量的值均必须满足路由约束。
注:路由系统不会试图查找出最佳匹配的路由。只会找出最先匹配的路由,然后用这条路由生成URL,
任何后续路由都会被忽略。当满足条件的第一个Route对象产生一个非空URL时,就终止URL生成过程。
为各个片段参数所选择的参数值将在其中被替换,并忽略尾部的默认值序列。
如果明确地提供了一些参数,但它们与片段参数或默认参数不符,那么该方法将把这些参数以“名字/值”对的查询字符串形式进行追加。
路由系统会渴望根据一条路由尽可能形成匹配,在这个意义上,它将重用输入URL的片段变量值。
@Html.ActionLink("输出URL","Index","Home","https","www.baidu.com","myFragementName",new{id="MyId"},new{id="myAnchorID",@class="MycssClass"})
标签值,action,contorller, 协议值 ,目标服务器名 , URL片段 , 片段变量 ,HTML标签属性
<a href="https://www.baidu.com/Home/Index/MyId#myFragmentName" id="myAnchorID" class="MycssClass">输出URL</a>
生成URL(不是链接):@Url.Action("Index","Home",new {id="Myid"})
string myActionUrl=Url.Action("Index","Home",new {id="Myid"})
RedirectToRouteResult result=RedirectToAction("Index")
RedirectToRouteResult result=RedirectToAction(new {controller="Home",action="index",id="MyId"})
二、定制路由系统(在系统扩展时可以用)
1.自定义RouteBase实现两个方法:
GetRouteData(HttpContextBase httpContext):入站URL匹配机制。框架依次对RouteTable.Routes的每个条目调用这个方法,
直到其中之一返回一个非空值。
GetVirturalPath(RequestContext requestContext,RouteValueDictionary values): 出站URL生成机制。框架依次对
RouteTable.Routes的每个条目调用这个方法,直到其中之一返回一个非空值。
2.自定义路由处理程序实现IRouteHandler接口:
GetHttpHandler(RequestContext requestContext)生成IHttpHandler接口,负责对请求进行处理。
在该接口的MVC实现中,完成实现了:查找控制器、调用动作方法、渲染视图、并将结果定写入到响应中去。
三、使用区域
每个区域代表应用程序的一个功能段。每个MVC区域有自己的文件夹结构,能够保持事物分离。
这会使项目元素与应用程序的每个功能区的相关性更加明显,有助于多个开发人员在同一个项目上工作而不会引起相互冲突。
区域能过路由系统得到广泛的支持。
区域在Areas文件夹下创建,以区域名(如Admin)作为子区域文件夹,并包括Controller、Models、Views文件夹。
Views文件夹下包括Shared文件夹和Web.config文件。有了一个名为“AdminAreaRegistration”类。
AdminAreaRegistration类定义了RegisterArea方法,注册了一个URL模式为Admin/{controller}/{action}/{id}的路由。
在Global.asax调用区域注册: AreaRegistration.RegisterAllAreas();
四、URL方案最佳方法
1.URL整洁和人性化
(1)设计URL来描述它们的内容,而不是应用程序的细节。例:/Articles/AnnualReport ,而不是/Website_v2/CachedContentserver/FromCache/AnnualReport
(2)尽可能采用内容而不是ID号。例:/Articles/AnnualReport,而不是/Articles/2392
如果必须要使用ID号请将内容加上。 /Articles/2392/AnnualReport
(3)不要对HTML页面使用文件扩展名,特殊文件类型除外(.jpg,.pdf,.zip)
(4)创建一种层次感。例:/Products/Menswear/Shirts/Red ,这样可以猜出父目录的URL。
(5)不区分大小写。ASP.NET路由系统默认是不区分大小写的。
(6)避免使用符号、代码、字符序列。单词分隔用“-”短横(my-great-article),不建议用下划线。千万不能用空格。
(7)不要修改URL。打破链接等于失去商务。必须要修改时,通过永久重定向(301)尽可能长时间地继续支持旧式的URL方案。
(8)具有一致性。在整个应用程序中采用一种URL格式。URL应该简短、易输入、可剪辑,且持久稳定,形象化网站结构。
2.Get和post使用选择:
get请求应该被用于所有只读信息检索(安全交互),post请求应该被用于所有修改程序状态的操作(更改交互)。