新普金娱乐网址


高通平台缩写地理

春宵苦短春梦长,莫负读书好时刻数学

【ASP.NET MVC体系】数学浅谈ASP.NET MVC 路由

  • 十二月 27, 2018
  • 数学
  • 没有评论

事例引入

原文地址:程序员的文娱情怀

 先看看如下例子,你能一心了解啊?

正文地址:http://www.cnblogs.com/aiweixiao/p/7752983.html

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 using System.Web.Routing;
 7 
 8 namespace MVCDemo
 9 {
10     public class RouteConfig
11     {
12         public static void RegisterRoutes(RouteCollection routes)
13         {
14             routes.MapMvcAttributeRoutes();//特性路由
15 
16             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");//忽略资源文件
17 
18             routes.MapRoute(
19                 name: "Default",//路由名,唯一
20                 url: "{controller}/{action}/{id}",//路由URL
21                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },//路由URL默认值
22                 namespaces: new[] { "MVCDemo.Controllers" },//命名空间避免二义性
23                 constraints: new { id = @"^\d*$" }//约束
24 
25                 );
26         }
27     }
28 }

 

注:该例子没有进入区域

原创 2017-10-26 微信号wozhuzaisi 程序员的文娱情怀

1 URI、URL与URN

数学 1

 1.1 URI、URL和URN定义 

一、映像马云

     URI(Uniform Resource
Identifier)代表统一资源标识符,标识资源的字符串;

     
 1)最早领悟马云,是因为在Taobao上买东西,总该知道何人是幕后的业主了呢,后来清楚是马云了,一个瘦瘦的,其貌不扬的阿塞拜疆巴库人,却持有前瞻的洞察力和锲而不舍的韧劲儿,所以有了新生的阿里巴巴的千军万马帝国。整个陕西省,尤其是马那瓜因为Alibaba的留存成为了中华互联网的前沿阵地之一,马云“马副委员长”功不可没。

     URL (Uniform Resource
Locator)代表联私营源定位符,互联网上标准资源的地址;

数学 2

     URN(Uniform Resources
Name)代表统一资源名称,互联网上资源的名目;

     
 马云成功将来,伴随她的第一手是鲜花和掌声,溢美之词,不绝于耳。Alibaba,天猫,天猫也成了高逼格,互联网+的代名词,无数的小公司主在TaobaoTaobao上发了财,中国人的消费娱乐经济习惯由此改变。然则想想最初马云创办中国黄页时的不被清楚,不被看好,也是唏嘘不已。“时势造英雄”,历史采用了马云,而马云影响了同胞!

 1.2 URI、URL和URN三者之间的涉及图

       
马云个人也常年卫冕中国的富裕户,俨然风云人物,在列国上,不管是政治或者合算上都能说上话,他自我就有留美的经验,当过爱尔兰语老师,交流起来更加恒通无阻。

数学 3

数学 4

1.3 对URI、URL和URN三者之间解析

     
 2)毫无疑问,马云是Alibaba的发言人。身材矮小的他,多年来在海美国媒体体的报道中被描写成“小淘气包”,要不就是“一个颧骨深凹,头发凌乱,笑起来显得有点调皮的小矮个儿”,还有关于他形容的刻画:“严肃而敏感”“淘气”“精灵般的”等。但是,马云将他分外的长相转化成了优势。当Alibaba生产的江西网商银行打算通过面部识别系统让客户实现长途开户时,Alibaba向人们表明马云那样一个“靠脸没饭吃的人到底靠脸吃上饭了”。

      本解析基于1.2
URI、URL和URN三者之间的关联图。

 

     
(1)从命名角度,URI标识资源且唯一,URL标识资源地址
,URN标识资源名称;

二、关于马云有趣的事

     
(2)从数学关系:URI=URL+URN+URL∩URN;很容易看到,URL一定是URI,但URI不必然是URL,同理,URN一定是URI,但URI不必然是URN;

     
1)一件就是马云的名言“梦想仍旧要有些,万一实现了啊?”,激励温暖了稍稍人的内心,一种积极的态度,或许就是一个改动的开首。

1.4 URL应有所特色

      2)【长得像马云】

     (1)  域名便于回忆和拼写;

       —
此前网上听说有一个长得很像马云的村屯孩子,被曝光后,出了名,马云也发表会援救那么些孩子求学的费用,令人羡慕,关键是其一孩子现在如同是一个影星了,已经在接拍戏份了,人生就是如此的奇妙,哈哈。

     (2)  简短;

数学 5

     (3)  便于输入;

      3)【阿里的花名】

     (4)  可以呈现出站点布局;

        —
马云被人可比喜欢金庸的武侠随笔,所以在阿里广大人都有谈得来的游侠花名,甚至于近日马云斥巨资创造的技巧探讨院,名字也叫了“达摩院”。可见马云的义士情怀至深。

     (5)
 应该是“可破解的”,用户能够透过移除URL的末段,进而到达更高层次的音讯连串布局;

数学 6

     (6)  持久、无法更改

      4)【马云和宋小宝拍过小品】

1.5  小结

      —
说来奇怪,马云竟然和笑星宋小宝还演过小品,感觉仍然蛮搞笑的,马云演的倒是很尊重,哈哈。

     
 常常处境下,URI代表同意资源标识符(Uniform Resource
Identifier)。URI是标识了一个资源的字符串。从技术角度看,所有URL都是URI。W3C认为“URL是一个非正式的定义,但它不行有效:URL是URI的一序列型,它经过代表本身的首要走访机制来标识资源”,换句话说,URI是某种资源的标识符,而URL则为获取该资源提供了实际的新闻。

      5)马云曾经说过这么一句话:我有生的话最大的荒谬就是创设Alibaba:

     
 注释:资源是一个抽象概念,既可以指一个文书,也足以指方法调用的结果或服务器上的一部分其它情节。

     
近日这句话已变为了装逼届的最一级装逼术语。借使马云真的这么后悔成立了Alibaba,为什么他不散尽家财,取之于社会,用之于社会?马云显明舍不得。

2 路由概述(传统路由)

数学 7

2.1  WebForm URL与Route URL

一句话,钱都是劳碌赚的,有钱人更爱钱。

   
 (1)WebForm中,对URL的传播请求日常映射到磁盘上的情理文件,如.aspx文件。例如对http://server/application/Product.aspx?id=4的请求映射到名为Products.aspx文件,该文件包含代码和标记用于呈现对浏览器的响应,一般请求示过程抽象如下:

三、为啥要写马云

   
 数学 8

     
 1)写马云不仅是因为她是中中国的富裕户,他创立的Alibaba那么大的商贸帝国,更因为她从一个小人物走来,不卑不亢,走出的明显令人钦佩。他就像是一面旗帜,照耀这绝对人,继续加油,书写属于自己的光亮。

     (2)ASP.NET
MVC中,平常地,URL映射并非映射到现实磁盘上的大体文件,这是依据ASP.NET路由特性,首要有五个经过,即URL映射和URL生成(接下去讲解)。在ASP.NET路由中,您能够定义URL情势,该格局涵盖在处理URL请求时使用的值的占位符。在运行时,运用程序名称前边的URL部分遵照你所定义的URL形式分析为离散值。例如,在伸手http://server/application/Products/show/beverages时,路由分析器可以将值Products、show和beverages传递给请求的处理程序。相反,在一个不由URL路由管理的请求中,/Products/show/beverages片段将被解释为运用程序中的一个文件的路径。
  

      2)【为啥崇拜马云】:

2.2  ASP.NET 路由与 URL 重写

     
  马云之所以有成百上千崇拜者,并不只是因为她有钱。二零一八年,马云的村办财富还比不过马化腾和李彦宏,这么些时候她的崇拜者就比马化腾和李彦宏要多众多。所以,我个人觉得马云的崇拜者不仅仅因为钱才崇拜他的。他的经纪理念,他的口才,他的战略眼光都是他抓住人的地点。而且她也甘愿把团结的独到之处展现给福特(Ford)观赏。我一贯觉得马云比较的靶子是马化腾,李彦宏和雷军这么些人选。马云相相比于大部分网络风云人物有个很风趣的特征是她并不懂技术,而且他很高调,他的老板理念和战略眼光才是她的致胜法宝。就跟巴菲特被广大人崇拜是一个道理,巴菲特炒股靠的是精准的见地和精炼的哲理,并不太依仗数学情势,很几个人都以为温馨也许就是下一个巴菲特。马云的功成名就也近乎,很六人觉着自己可以是下一个马云,因为她不懂技术,他的打响看起来是足以复制的。

        ASP.NET 路由不同于其他 URL
重写方案。URL 重写通过在将呼吁发送到网页在此之前实际更改 URL
来拍卖传入请求。例如,一个采用 URL 重写的应用程序可能会将 URL 从 /Products/Widgets/ 更改为 /Products.aspx?id=4。此外,URL 重写平时没有对号入座的 API
来创立基于形式的 URL。在 URL 重写中,即使改动了 URL
格局,则必须手动更新包含原始 URL 的有所超链接。由于
ASP.NET 路由得以从 URL 提取值,所以拍卖传入请求时不更改
URL。假若必须创设一个 URL,则将参数值传递到为您生成 URL
的主意中。若要更改 URL
情势,请在某地方变动该格局,您在应用程序中开创的基于该格局的所有链接将自动使用新形式。

数学 9

2.3  路由定义

       3)【马云的魅力】

        A route is a URL pattern that is mapped to a handler.
The handler can be a physical file, such as an .aspx file in a Web Forms
application. A handler can also be a class that processes the request,
such as a controller in an MVC application. To define a route, you
create an instance of the Route class by specifying the URL pattern, the
handler, and optionally a name for the route.

     
马云的个体魅力和说服力对Alibaba的迈入起到了关键效率,为合作社争取到了大气美貌和基金,同时也增强了我的名声。他生性特别,融合了炎黄价值观的拿手表彰且胆识过人的再度优点。最早的一位外籍员工曾这样评论马云的天性:“马云有着魔力”。在那上边,马云有着史蒂夫(Steve)·乔布斯的个性特点。乔布斯优良的领导力以及为达标目标不择手段的作风曾被最初的苹果麦金塔设计团队称为“现实扭曲力场”。

     
 译文:路由是一种被映射到某个处理程序的URL格局。处理程序可能是一个大体文件,如在WebForms运用程序中的aspx文件。处理程序也说不定是一个拍卖请求的类,如MVC应用程序中的控制器。要定义路由,您可以透过点名URL情势、处理程序和路线的称谓来创建路由类的实例。

数学 10

      You add the route to the
application by adding the Route object to the static Routes property of
the RouteTable class. The Routes property is a RouteCollection object
that stores all the routes for the application.You typically do not have
to write code to add routes in an MVC application. Visual Studio project
templates for MVC include preconfigured URL routes. These are defined in
the MvcApplication class, which is defined in the
Global.asax file.

       
 交换技能是马云自己的扭曲力场的基本。马云的开口风格分外容易深刻人心,他说的话都很容易令人了然与记忆,且耐人寻味。有关她的格言集萃以中英文的款式在网上广泛流传,很多都是简单的顿悟,仿佛只适合现身在励志海报中,比如说“相信你的指望,相信你协调”,或是“学习外人的方针和技艺,但毫无改动你的期待”等。还有一些名言读起来有点像《伊索寓言》,比如“如果地上有9只兔子,你要掀起其中一只,这您就死死盯住这只兔子。你要改变战术可以,但并非换兔子……先抓住一只,放进口袋里,然后再抓其他的”。人们仍旧从马云的那段格言中引申出其它一种及时行乐的意思,用来替自己的享乐消费行动辩解,比如购置名牌鞋子。

     
译文:你可以通过将路由对象添加到RouteTable类的静态路由属性中的格局将路由添加到应用程序中。路由属性是一个为应用程序存储所有路由的路由对象。在MVC应用程序中,您日常不需要编制代码来添加路由。VS项目模板为MVC包含了先行布置的URL路由。这多少个都是在MvcApplication类中定义的,被定义在Global.asac
文件中。

四、马云简史

2.4 URL Patterns(URL模式)

1  1988年毕业于阿塞拜疆巴库医科高校外语系

A URL pattern can contain literal values
and variable placeholders (referred to as URL
parameters). The literals and placeholders are located in segments of the URL which are delimited by the slash
(/) character.

2
领先生的时候评过温州市十佳老师,发起霍鲁逊湖边沿首个乌克兰(Crane)语角,开头在波尔图翻译界出名声。由于过多个人来请她做翻译,忙然则来了就确立一个翻译社

译文:URL形式也许含有文字值和变量占位符(称为URL参数)。文字和占位符位于URL的有些中,由斜杠(/)字符分隔。

3 翻译社亏本,马云跑去权利进货卖钱

When a request is made, the URL is parsed
into segments and placeholders, and the variable values are provided to
the request handler. This process is similar to the way the data in
query strings is parsed and passed to the request handler. In both cases
variable information is included in the URL and passed to the handler in
the form of key-value pairs. For query strings both the keys and the
values are in the URL. For routes, the keys are the placeholder names
defined in the URL pattern, and only the values are in the URL.

4 安徽省交通厅委托到美利哥催讨一笔债务,我们觉得最合适的人是马云

译文:当发出请求时,URL被分析为一些和占位符,且变量值被提供给请求处理程序。这多少个过程看似于查询字符串中的数据被分析并传递给请求处理程序的法子。在这二种情景下,变量消息都包含在URL中,并以键值对的样式传递给处理程序。对于查询字符串,键和值都在URL中。对于路由,键是URL模式中定义的占位符名称,在URL中单独是值。

5  在圣何塞,对总计机一窍不通的马云第一次上了互联网。

In a URL pattern, you define placeholders
by enclosing them in braces ( { and } ). You can define more than one
placeholder in a segment, but they must be separated by a literal value.
For example, {language}-{country}/{action} is a valid
route pattern. However, {language}{country}/{action} is not a valid pattern,
because there is no literal value or delimiter between the placeholders.
Therefore, routing cannot determine where to separate the value for
the language placeholder from the value for the country placeholder.

6 回国后辞去,自己拿了7000元钱创业,做中国黄页

译文:在URL格局中,通过将它们封装在括号(以及)中来定义占位符。您可以在一个段中定义五个占位符,然则必须用文字值分隔它们。例如,语言-国家/行动是一种有效的门径情势。然则,语言国家/action不是一个卓有效用的情势,因为占位符之间从未文字值或分隔符。因而,路由不可能决定将语言占位符的值与国家占位符的值分隔开。

一年后的1996年,营业额做到了700万

The following table shows valid route
patterns and examples of URL requests that match the patterns.

数学 11

下表彰显了实惠的路由格局和与格局匹配的URL请求示例。

7 华夏黄页上线后,马云带合伙人何一兵到新加坡市做客当时的互联网偶像张树新

数学 12

8
背后就是蔡崇信参预,孙正义投资,雅虎中国投资那一个耳熟能详的故事我就不再说了

 Typical URL Patterns in MVC
Applications

五、写在终极

译文:MVC运用程序中的经典格局

       
很强烈,马云就是其一时期的球星,相信她会给我们更多惊喜和改动,你本身都有可能成为下一个马云~~

 URL patterns for routes in MVC
applications typically include {controller} and {action} placeholders.

数学 13

译文:在MVC运用程序中,路由URL模式日常包含控制器和动作占位符。

2016年2月11日24时,淘宝全球双11狂欢节交易额突破千亿,一举创下全球零售史上的突发性。

When a request is received, it is routed
to the UrlRoutingModule object and then to the MvcHandler HTTP handler.
The MvcHandler HTTP handler determines which controller to invoke by
adding the suffix “Controller” to the controller value in the URL to
determine the type name of the controller that will handle the request.
The action value in the URL determines which action method to
call.

 

译文:当收到到一个伸手时,它被路由到UrlRoutingModule对象,然后发送到MvcHandler
HTTP处理程序。MvcHandler
HTTP处理程序通过向URL中的控制器值添加后缀“控制器”来规定要调用哪个控制器,以确定控制器的品种名称,该控制器将处理请求。URL中的操作值决定调用哪个操作方法。

 

For example, a URL that includes the URL
path /Products is mapped to a controller named ProductsController. The value in the action parameter is the name of the action method that
is called. A URL that includes the URL path /Products/show would result in a call to the Showmethod of the ProductsController class.

数学 14

译文:例如,一个含有URL路径  /产品
的URL映射到一个名为ProductsController的控制器。action参数中的值是调用的操作方法的称呼。一个饱含URL路径
  /产品/show
 的URL会招致对ProductsController类的Showmethod的调用。

关注微信公众号

The following table shows the default URL
patterns, and it shows examples of URL requests that are handled by the
default routes.

 

译文:下表呈现了默认的URL情势,它呈现了由默认路由拍卖的URL请求的言传身教。

 数学 15

The route with the pattern {resource}.axd/{*pathInfo} is included to prevent requests
for the Web resource files such as WebResource.axd or ScriptResource.axd
from being passed to a controller.

For IIS 7.0, no file-name extension is
needed. For IIS 6.0, you must add the .mvc file-name extension to the
URL pattern, as in the following example:

译文:带有形式资源的路由axd/pathInfo,被用来制止Web资源文件的请求,例如WebResource,axd或ScriptResource传递到控制器。对于IIS
7.0,不需要任何文件名称增加。对于IIS
6.0,您必须添加.mvc文件扩充名到URL格局中,如下面的例子:

 数学 16

 如在VS2013拔取MVC模板创设项目时,自动生成类RouteConfig.

数学 17

2.5 Adding Routes to a Web Forms
Application(添加路由到WebForm运用程序)

In a Web Forms application, you create
routes by using the MapPageRoute(String, String, String) method of the
RouteCollection class. The MapPageRoute method creates a Route object
and adds it to the RouteCollection object. You specify properties for
the Route object in parameters that you pass to the MapPageRoute
method.

译文:在Web
Forms应用程序中,您可以应用路由选拔类的MapPageRoute(字符串、字符串、字符串)方法创造路由。MapPageRoute方法制造一个路由对象并将其添加到RouteCollection对象。您可以在传递给MapPageRoute方法的参数中指定路由对象的性能。

Typically, you add routes in a method
that is called from the handler for the Application_Start event in the
Global.asax file. This approach makes sure that the routes are available
when the application starts. It also enables you to call the method
directly when you unit-test the application. If you want to call a
method directly when you unit-test the application, the method that
registers the routes must be static (Shared in Visual Basic) and must
have a RouteCollection parameter.

译文:平日地,在大局Global.asax文件中,您可以在一个叫做Application_Start
方法里添加路由。该方法确保当应用程序启动时,路由是可以选择的。它还使你能够在对应用程序进行单元测试时直接调用该办法。假使您想在对应用程序举办单元测试时直接调用方法,那么注册路由的格局必须是静态的(在Visual
Basic中是共享的),并且必须拥有一个路由参数。

The following example shows code from a
Global.asax file that adds a Route object that defines two URL
parameters named action and categoryName. URLs that have the specified
pattern are directed to the physical page named Categories.aspx.

译文:下边的示范体现了来自.Globalasax文件的代码,该代码添加了一个路由对象,该对象定义了两个名为action和项目称号的URL参数。具有指定格局的url被定向到名为分类.aspx的情理页面。

protected void Application_Start(object sender, EventArgs e)
{
    RegisterRoutes(RouteTable.Routes);
}

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("",
        "Category/{action}/{categoryName}",
        "~/categoriespage.aspx");
}

2.6 Adding Routes to an MVC
Application

 If you adopt the MVC convention of
implementing controllers by creating classes that derive from the
ControllerBase class and giving them names that end with “Controller”,
you do not need to manually add routes in an MVC application. The
preconfigured routes will invoke the action methods that you implement
in the controller classes.

译文:即便您通过创办从控制器基类派生的类来贯彻控制器的MVC约定,并给它们以“控制器”结尾的称号,那么您就不需要在MVC应用程序中手动添加路由了。预配置的路由将调用您在控制器类中实现的操作方法。

If you want to add custom routes in an
MVC application, you use the MapRoute(RouteCollection, String, String)
method instead of the MapPageRoute(String, String, String)
method.
译文:假若您想在MVC应用程序中添加自定义路由,您能够利用MapRoute(RouteCollection、String、String)方法,而不是MapPageRoute(字符串、字符串、字符串)方法。

The following example shows the code that
creates default MVC routes in the Global.asax file, as defined in the
Visual Studio project template for MVC applications.

 译文:下面的事例体现了在大局中开创默认MVC路由的代码。asax文件,正如在Visual
Studio项目模板中定义的MVC应用程序。

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default",                                              // Route name 
            "{controller}/{action}/{id}",                           // URL with parameters 
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

    }

    protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);
    }
}

2.7 Setting Default Values for URL
Parameters(为URL参数设置默认值)

When you define a route, you can assign a
default value for a parameter. The default value is used if a value for
that parameter is not included in the URL. You set default values for a
route by assigning a dictionary object to the Defaults property of the
Route class. The following example shows how to add a route that has
default values, by using the MapPageRoute(String, String, String,
Boolean, RouteValueDictionary) method.

译文:当您定义一个路由时,您可以为一个参数指定一个默认值。假诺该参数的值没有包含在URL中,则应用默认值。通过将dictionary对象分配给route类的默认属性,可以为路由设置默认值。下面的事例呈现了什么通过动用MapPageRoute(字符串、字符串、字符串、布尔值、RouteValueDictionary)方法添加具有默认值的路由。

void Application_Start(object sender, EventArgs e) 
{
    RegisterRoutes(RouteTable.Routes);
}

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("",
        "Category/{action}/{categoryName}",
        "~/categoriespage.aspx",
        true,
        new RouteValueDictionary 
            {{"categoryName", "food"}, {"action", "show"}});
}

When ASP.NET routing handles a URL
request, the route definition shown in the example (with default values
of food for categoryName and showfor action) produces the results that
are listed in the following table.

数学 18

For MVC applications, overloads of the
RouteCollectionExtensions.MapRoute method, such as
MapRoute(RouteCollection, String, String, Object, Object), enable you to
specify defaults.

2.8 Handling a Variable Number of Segments
in a URL Pattern(在URL格局中处理可变多少的段)

Sometimes you have to handle URL requests
that contain a variable number of URL segments. When you define a route,
you can specify that if a URL has more segments than there are in the
pattern, the extra segments are considered to be part of the last
segment. To handle additional segments in this manner you mark the last
parameter with an asterisk (*). This is referred to
as a catch-all parameter. A route with a
catch-all parameter will also match URLs that do not contain any values
for the last parameter. The following example shows a route pattern that
matches an unknown number of segments.

译文:有时你必须处理包含一个可变多少的URL段的URL请求,其中。当您定义一个路由时,您可以指定,假若一个URL的局部比情势中有更多的段,那么额外的段被认为是终极一片段的一部分。要以这种方法处理额外的段,您可以用星号(*)标记最后一个参数。这被称为一个含糊的参数。一个蕴含所有参数的路由也将配合不包含最终一个参数的任何值的url。上边的以身作则体现了一个配合未知数量的段的路由形式。

/ query / { queryname } { * queryvalues
}

When ASP.NET routing handles a URL
request, the route definition shown in the example produces the results
that are listed in the following table.

译文:当ASP.NET路由拍卖一个URL请求时,示例中所示的路由定义暴发了下表中列出的结果。

数学 19

2.9  Adding Constraints to
Routes(为路由添加封锁)

In addition to matching a URL request to
a route definition by the number of parameters in the URL, you can
specify that values in the parameters meet certain constraints. If a URL
contains values that are outside the constraints for a route, that route
is not used to handle the request. You add constraints to make sure that
the URL parameters contain values that will work in your
application.

译文:除了通过URL中参数的数额来匹配URL请求外,还足以指定参数中的值满意特定的约束规范。如若一个URL包含的值超出了路由的束缚,那么该路由就不会被用于拍卖请求。您添加了一些束缚,以担保URL参数包含在你的应用程序中行事的值。
Constraints are defined by using regular
expressions or by using objects that implement the IRouteConstraint
interface. When you add the route definition to the Routes collection,
you add constraints by creating a RouteValueDictionary object that
contains the verification test. The key in the dictionary identifies the
parameter that the constraint applies to. The value in the dictionary
can be either a string that represents a regular expression or an object
that implements the IRouteConstraint interface.

译文:约束是因此拔取正则表明式或采纳实现IRouteConstraint接口的目的来定义的。当将路由定义添加到路由集合时,通过创造一个蕴含验证测试的RouteValueDictionary对象来增长约束。字典中的键标识约束应用到的参数。字典中的值可以是意味正则表明式的字符串,也足以是兑现IRouteConstraint接口的对象。
If you provide a string, routing treats
the string as a regular expression and checks whether the parameter
value is valid by calling the IsMatch method of the Regex class. The
regular expression is always treated as case-insensitive. For more
information, see .NET Framework Regular Expressions.

译文:假诺您提供一个字符串,那么路由将字符串作为一个正则表明式来处理,并由此调用Regex类的IsMatch方法检查参数值是否管用。正则表达式总是被视为不区分轻重缓急写的。要通晓更多新闻,请参阅。净框架正则表明式。
If you provide an IRouteConstraint
object, ASP.NET routing checks whether the parameter value is valid by
calling the Match method of the IRouteConstraint object. The Match
method returns a Boolean value that indicates whether the parameter
value is valid.

译文:如若你提供一个IRouteConstraint对象,ASP.NET
路由通过调用IRouteConstraint对象的非凡方法,
以此来检查参数值是否管用。Match方法重临一个布尔值,该值表示参数值是否有效。
The following example shows how to use
the MapPageRoute method to create a route that has constraints that
limit what values can be included in the locale and year parameters. (In
an MVC application, you would use the MapRoute method.)

译文:下边的示范显示了怎样利用MapPageRoute方法创立一条路线,该路由限制了地域和年参数中可以涵盖的值。(在MVC应用程序中,您将应用map路由艺术。)

 

 1 public static void RegisterRoutes(RouteCollection routes)
 2 {
 3     routes.MapPageRoute("",
 4         "Category/{action}/{categoryName}",
 5         "~/categoriespage.aspx",
 6         true,
 7         new RouteValueDictionary 
 8             {{"categoryName", "food"}, {"action", "show"}},
 9         new RouteValueDictionary 
10             {{"locale", "[a-z]{2}-[a-z]{2}"},{"year", @"\d{4}"}}
11        );
12 }

When routing handles a URL request, the
route definition shown in the previous example produces the results that
are listed in the following table.

数学 20

 2.10 Scenarios When Routing Is Not
Applied(不应用路由时的场地)

Under
some circumstances, ASP.NET routing does not handle a request even when
is enabled for the Web site. This section describes some scenarios in
which routing does not handle the request.

译文:在少数境况下,就算在Web站点启用时,ASP.NET
路由也不处理请求。本有的讲述了一些情况,其中路由不处理请求。

A Physical File is Found that Matches
the URL Pattern(找到与URL情势匹配的情理文件)

By default, routing does not handle
requests that map to an existing physical file on the Web server. For
example, a request for
http://server/application/Products/Beverages/Coffee.aspx is not handled
by routing if a physical file exists at Products/Beverages/Coffee.aspx.
Routing does not handle the request even if it matches a defined
pattern, such as {controller}/{action}/{id}.

译文:默认情形下,路由不处理映射到Web服务器上现有物理文件的伏乞。例如,如果存在 Products/Beverages/Coffee.aspx.物理文件,请求http://server/application/Products/Beverages/Coffee.aspx
不被路由拍卖。即使它与已定义的形式相匹配,路由不处理请求,例如控制器/动作/id。
If you want routing to handle all
requests, even requests that point to files, you can override the
default behavior by setting the RouteExistingFiles property of the
RouteCollection object to true. When you set this value to true, all
requests that match a defined pattern are handled by routing.

译文:要是你想要路由拍卖所有请求,甚至指向文件的哀求,您能够通过安装RouteCollection对象的特性RouteExistingFiles为true, 
以此来覆盖默认值。当您将以此值设置为true时,匹配定义形式的所有请求都由路由拍卖。

Routing Is Explicitly Disabled for a
URL Pattern(为URL格局显式禁用路由)

You can
also specify that routing should not handle certain URL requests. You
prevent routing from handling certain requests by defining a route and
specifying that the StopRoutingHandler class should be used to handle
that pattern. When a request is handled by a StopRoutingHandler object,
the StopRoutingHandler object blocks any additional processing of the
request as a route. Instead, the request is processed as an ASP.NET
page, Web service, or other ASP.NET endpoint. You can use the
RouteCollection.Ignore method  

译文:您仍可以够指定路由不应当处理某些URL请求。通过定义一条路由,并点名StopRoutingHandler类应该用于拍卖该格局,从而避免了处理某些请求的路由。当一个StopRoutingHandler对象处理请求时,StopRoutingHandler对象会卡住请求作为路由的别样附加处理。相反,请求是作为ASP.NET
页面来拍卖的,网络页面,Web服务,或任何ASP.NET端点。您可以动用 RouteCollection.Ignore方法。

1 public static void RegisterRoutes(RouteCollection routes)
2 {
3   routes.Ignore("{resource}.axd/{*pathInfo}");
4 }

2.11 How URLs Are Matched to
Routes(url怎样与路由异常)

When routing handles URL requests, it
tries to match the URL of the request to a route. Matching a URL request
to a route depends on all the following conditions:

译文:当路由拍卖URL请求时,它尝试将请求的URL与路由非常。将URL请求匹配到路由取决于以下规则:

  • The route patterns that you have
    defined or the default route patterns, if any, that are included in
    your project type. 

  • 译文:您已经定义的路由情势或默认的路由格局,如果有的话,它们含有在您的项目连串中。

  • The order in which you added them to
    the Routes collection.
  •  译文:您将它们增长到路由集合的逐一。

  • Any default values that you have
    provided for a route.

  • 译文:您为某个路由提供的此外默认值。
  • Any constraints that you have
    provided for a route.

  • 译文:您为路径所提供的其他约束。

  • Whether you have defined routing to
    handle requests that match a physical file.

  • 译文:是否定义了路由来拍卖与物理文件匹配的乞请。

For example, suppose that you add routes
with the following patterns:

译文:例如,假若您添加了以下格局:
   Route 1 is set to
{controller}/{action}/{id}

   译文:
路径1设置为{controller}/{action}/{id}
   Route 2 is set to
products/show/{id}

 
译文:路线2设置为 products/show/{id}
Route 2 will never handle a request
because Route 1 is evaluated first, and it will always match requests
that could also work for Route 2. A request for
http://server/application/products/show/bikes seems to match Route 2
more closely, but it is handled by Route 1 with the following
values:
controller is products.
action is show.
id is bikes.

译文:

路由2永远不会处理请求,因为路由1率先被匹配,它总是匹配可能在2号路径上行事的呼吁。请求http://server/application/products/show/bikes似乎比赛路线2更紧密,但它是由路线1以下值:

控制器products.

行动是show.

id是bikes.

Default values are used if a parameter is
missing from the request. Therefore, they can cause a route to match a
request that you did not expect. For example, suppose that you add
routes with the following patterns:
Route 1: {report}/{year}/{month}, with
default values for year and month.
Route 2: {report}/{year}, with a default
value for year.
Route 2 will never handle a request.
Route 1 might be intended for a monthly report, and Route 2 might be
intended for an annual report. However, the default values in Route 1
mean that it will match any request that could also work for Route
2.

译文:

一经请求中缺乏一个参数,则应用默认值。因而,它们可以造成一条匹配您没有预料到的呼吁的路由。例如,假诺您添加了以下格局:

途径1:报告/年/月,年和月默认值。

途径2:报告/年,年默认值。

路由2永远不会处理请求。第1条可能是本着每月报告的,而路由2或者是针对性年度报告的。不过,路由1中的默认值意味着它将分外任何可能用于路由2的伸手。

You can avoid ambiguity in the patterns
by including constants, such as annual/{report}/{year} and
monthly/{report}/{year}/{month}.
If a URL does not match any Route object
that is defined in the RouteTable collection, ASP.NET routing does not
process the request. Instead, processing is passed to an ASP.NET page,
Web service, or other ASP.NET endpoint.

译文:您可以经过包含常量来避免形式中的歧义,例如
annual/{report}/{year} and monthly/{report}/{year}/{month}。

假设URL不兼容在RouteTable集合中定义的任何路由对象,ASP.NET路由不处理请求。相反,处理被传送给一个ASP.NET
Page ,Web服务,或另外ASP.NET端点。

2.12 路由二义性

只在同一个缓解方案中,存在六个以及上述同等控制器下的相同action,当URL请求时,会冒出二义性。

二义性Demo目录结构

数学 21

RouteConfig.cs

数学 22数学 23

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 using System.Web.Routing;
 7 
 8 namespace MVCDemo
 9 {
10     public class RouteConfig
11     {
12         public static void RegisterRoutes(RouteCollection routes)
13         {
14             routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
15 
16             routes.MapRoute(
17                 name: "Default", 
18                 url: "{controller}/{action}/{id}", 
19                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
20                 
21            );
22         }
23     }
24 }
25                 

View
Code

/Controllers/RouteDemo

数学 24数学 25

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 
 7 namespace MVCDemo.Controllers
 8 {
 9     public class RouteDemoController : Controller
10     {
11         //
12         // GET: /RouteDemo/
13         public ActionResult Index()
14         {
15             return View();
16         }
17     }
18 }

View
Code

/Controllers/NewFolder1/RouteDemo

数学 26数学 27

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 
 7 namespace MVCDemo.Controllers.NewFolder1
 8 {
 9     public class RouteDemoController : Controller
10     {
11         //
12         // GET: /RouteDemo/
13         public ActionResult Index()
14         {
15             return Content("路由二义性测试");
16         }
17     }
18 }

View
Code

测试结果

数学 28

3 路由概述(特性路由)

 特性路由是在ASP.NET MVC
5中新增的,传统路由ASP.NET MVC 1中就有了。

 从内容上来看,特性路由的内容与传统路由差不多,同样有路由URL、路由值、控制器路由、路由约束和路由默认值等。鉴于篇幅限制,在此处就大概的概述一下,不作详细阐释,先前时期有时光依然有对象需要,再论述。

 定义:特性路由就是将路由URL定义在控制器上或控制器内的方法上,而不像传统路由将路由URL定义在RouteConfig.cs中。相比较如下

数学 29

 

数学 30

3 路由生成URL

 
 路由两个重要职责:匹配传入的URL请求和结构与特定路由对应的URL,概括之匹配URL和组织URL。在生成URL时,生成URL的意思应该率先与选用用来生成URL的路由相匹配,这样路由就足以在处理传入或传播的URL时改为完全的双向系统。原则上,开发人士应该提供一组路由值,以便路由系统从中选中第一个可以匹配URL的路由。

 3.1 URL生成的高层系概述

 
路由的中坚是一个相当简单的算法,该算法基于一个由RouteCollection类和RouteBase类组成的简约抽象对象。可以运用多种方法来生成URL,但那么些办法都以调用RouteCollection.GetVirtualPath的一个重载方法而终止。RouteCollection.GetVirtulPath方法公有多少个重载版本,下边的代码体现它们的点子签名:

1  public  VirtualPathData GetVirtualPath(RequestContext requestContex,RouteValueDictionary values)
2 
3  public  VirtualPathData GetVirtualPath(RequestContext requestContex,string name,RouteValueDictionary values)

 第一个重载版本接受当前的RequestContext,以及由用户指定的路由值(字典)。

(1)路由集合通过RouteBase.GetVirtualPath方法遍历每个路由并访问:“可以转移给定参数的URL吗”,那么些历程看似于在路由与传播请求匹配时所采纳的配合逻辑。

(2)假若一个路由可以回答下面的问题(即匹配),那么它就会回去一个富含了URL的VirTualPathData实例以及此外匹配的音讯。否则,它就回来空值,路由体制移向列表中的下一个路由。

其次个重载接受五个参数,其中第二个参数是路由名称。在路由集合中路由名称是绝无仅有的,也就是说,没有六个不等的路由具有同样的称谓。当指定了路由名称时,路由集合就不需要循环遍历每个路由,相反,它可以即刻找到指定名称的路由,并移向下边的步骤(2)。倘若找到的路由不可以配合指定的参数,该办法就会回来空值,并且不再匹配其他路由。

  3.2  URL生成详解

 
(1)开发人士调用像Html.ActionLink或Url.Action之类的措施,那一个情势反过来再调用RouteCollection.GetVirtualPath方法,并向它传递一个RequestContext对象、一个含有值的字典以及用于接纳生成URL的路由名称(可选参数)。

 (2)路由体制查看要求的路由参数(即没有提供路由参数的默认值),并保管提供的路由值字典为每一个要求的参数提供一个值,否则,URL生成程序就会及时停下,并回到空值。

 (3)一些路由可能带有没有对应路由参数的默认值。如路由可能为category键提供默认值“pastries”,但是cateory不是路由URL的一个参数,这种场地下,假设用户传入的路由值字典为category提供了一个值,那么该值必须匹配category的默认值。

 (4)然后路由系统应用路由约束。

(5)路由分外成!现在可以通过查看每一个路由参数,并尝试采取字典中的对应值填充相应参数,进而生成URL。

可以包括为如下流程图:

数学 31

 

4 路由绑定到操作

 在这一章节,紧要分析URL绑定到控制器操作的最底层细节,分析底层原理,精晓ASP.NET请求管道。注意,近来路由不仅仅只是ASP.NET
MVC的一个风味了,它早已超越这一个界定,如ASP.NET Dynamic
Data。路由既不包括MVC的里边知识,也不借助于于MVC。

 4.1 高层次请求的路由管道

  当ASP.NET
处理请求时,路由管道主要由以下几步组成:

 
 (1)UrlRoutingModule尝试使用在RouteTable中登记的路由匹配当前乞求。

 
 (2)如若RouteTable中有一个路由成功匹配,路由模块就会从匹配成功的路由中拿到IRouteHandler接口对象。

 
 (3)路由模块调用IRouteHandler接口的GetHandler方法,并赶回用来拍卖请求的IHttpHandler对象。

 
 (4)调用HTTP处理程序中的ProcessRequest方法,然后把要拍卖的请求传递给它

   (5)在ASP.NET
MVC中,IRouteHandler是MvcRouteHandler类的一个实例,MvcRouteHandler转而回到一个贯彻了IHttpHandler接口的MvcHandler对象。再次回到的MvcHandler对象重要用来实例化控制器,并调
       用该实例化的控制器上的操作方法。

4.2 路由数量

   
调用GetRouteData方法会再次来到RouteData的一个实例。RouteData中带有了有关匹配请求的路由音讯。

   
如URL:{Controller}/{action}/{id}。当请求/albums/list/123不翼而飞时,该路由就会尝试匹配传入的伸手,假设配合成功,它就成立一个字典,其中蕴含了从URL中分析出的音信。确切地讲,路由还会向Values字典中为URL中的每个路由参数添加一个键;对于价值观路由{Controller}/{action}/{id},Values字典中应当至少含有多少个键,分别是Controller,action和id,假若传入的URL是对/albums/list/123的哀告,路由就会分析该请求的URL,并为字典的键提供值。本例中,字典中“Controller”键的值为albums,”action”键的值为“list”,”id”键的值是“123”;对于特性路由MVC使用DataTokens字典来囤积更确切的消息,而不是操作名称字符串。具体来说,它蕴含一个操作描述符列表,这个描述符直接指向路由匹配时可能行使的操作方法。对于控制器级其它表征路由,列表大校有不止一个操作。在总体MVC中都有利用的RequestContext的RouteData属性保存着外面路由值。

5 路由调试

 
 使用RouteDebugger调试,启用RouteDebugger后,它会用一个DebuggerRouteHandler替换所有路由处理程序,DebugRouteHandler截获所有传入的请求,并查询路由表中的每一个路由,以便在页面底部展现路由的诊断数据和参数。为使用RouteDebugger,只需在VS的Package
Manager Console窗口中拔取NuGet安装即可,命令Install-Package
routedebugger.。RouteDebugger包在添加Route
Debugger程序集的同时。也在web.config文件的appSettings节点中添加一个安装,用来拉开或禁用路由调试。

<add key="RouteDebugger:Enable" value="true'>

 只要启用RouteDebugger,它就显得从(在地方栏中)当前恳请URL中领到的路由数据。如此,可以在地点栏中输入各个URL,并查阅输入的URL能与哪些路由相当,在页面底部,它还会体现一个涵盖应用程序定义的所用路由列表,这样可以查看定义的哪个路由可以与眼前URL相匹配。

设置教程如下:

视图=>其他窗口=>程序包管理控制台

数学 32

在窗口中输入:Install-Package
routedebugger

数学 33

抑或也足以应用NuGet很有利的安装RouteDebugger,在品种方面右键-“Manage
NuGet Packages”-“Online”输入”RouteDebugger”然后”Install”.

本来, 你也得以团结下载RouteDebugger.dll,
引用到web项目中, 然后手动在web.config中投入

<add key="RouteDebugger:Enabled" value="true" />

测试结果

RouteConfig.cs

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 using System.Web.Routing;
 7 
 8 namespace MVCDemo
 9 {
10     public class RouteConfig
11     {
12         public static void RegisterRoutes(RouteCollection routes)
13         {
14             routes.MapMvcAttributeRoutes();//
15 
16             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
17 
18             routes.MapRoute(
19                 name: "Default",
20                 url: "{controller}/{action}/{id}",
21                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
22             );
23         }
24     }
25 }

RouteDemoController

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 
 7 namespace MVCDemo.Controllers
 8 {
 9     public class RouteDemoController : Controller
10     {
11         //
12         // GET: /RouteDemo/
13         public ActionResult Index()
14         {
15             return View();
16         }
17     }
18 }

Index

1 @inherits System.Web.Mvc.WebViewPage
2 
3 <h2>RouteDebugger调试</h2>

 

数学 34

6 与路由相关的紧要性命名空间和类

 6.1  路由涉及的命名空间

数学 35

 6.2 Class
Reference( 路由涉及到的基本点类)

数学 36

 

7 总结

 由于篇幅有限,路由章节就写到这,当然,还有不少内容没写,如路由安排文件、路由平安设置、自定义路由约束等,留给读者对象们去探讨吗。

8 参考文献

 【01】https://msdn.microsoft.com/en-us/library/cc668201.aspx\#setting\_default\_values\_for\_url\_parameters

【02】http://www.cnblogs.com/willick/p/3343105.html

【03】https://msdn.microsoft.com/zh-cn/library/cc668201(v=vs.100).aspx

【04】Professional Asp.net MVC 5

【05】http://www.cnblogs.com/liangxiaofeng/p/5620033.html

【06】https://msdn.microsoft.com/en-us/library/cc668177.aspx

【07】https://msdn.microsoft.com/en-us/library/dd535620.aspx

【08】https://msdn.microsoft.com/en-us/library/cc668176.aspx

【09】https://msdn.microsoft.com/en-us/library/dd329551.aspx

【10】https://msdn.microsoft.com/en-us/library/system.web.routing.route.aspx

【11】https://msdn.microsoft.com/en-us/library/system.web.routing.pageroutehandler.aspx

【12】https://msdn.microsoft.com/en-us/library/system.web.mvc.mvcroutehandler.aspx

【13】https://msdn.microsoft.com/en-us/library/system.web.ui.page.routedata.aspx

【14】https://msdn.microsoft.com/en-us/library/bb398900.aspx

【15】https://msdn.microsoft.com/en-us/library/ee941656.aspx

 

9   版权

 

  • 感谢您的翻阅,若有不足之处,欢迎指教,共同学习、共同提高。
  • 博主网址:http://www.cnblogs.com/wangjiming/。
  • 极少一些作品利用读书、参考、引用、抄袭、复制和粘贴等多种主意组成而成的,大部分为原创。
  • 如您喜爱,麻烦推荐一下;如你有新想法,欢迎指出,邮箱:2016177728@qq.com。
  • 能够转载该博客,但无法不知名博客来源。

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图