伟德国际1946事例引入,U帕杰罗Ls.所以那也就从未途径对应的一定文件了.

 
 路由五个紧要义务:匹配传入的URubiconL请求和布局与一定路由对应的U福特ExplorerL,概括之匹配U汉兰达L和结构UENCOREL。在生成U汉兰达L时,生成U兰德酷路泽L的情趣应该率先与接纳用来生成U奥迪Q3L的路由相匹配,那样路由就足以在处理传入或传播的U昂科拉L时变成全部的双向系统。原则上,开发人员应该提供一组路由值,以便路由系统从中选中首个可以匹配U奥德赛L的路由。

§8 URLs and Routing

Before ASP.NET MVC, the core assumption of routing in ASP.NET (just like
in many other web application platforms) was that URLs correspond
directly to files on the server’s hard disk. The server executes and
serves the page or file corresponding to the incoming URL. Table 8–1
gives an example

伟德国际1946 1

那般, 限制会很多, 有的人不想让旁人知道本身文件的路线,
或然是这一个代表方法太为难了等等.

 

      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.

§8.1 Putting the Programmer Back in Control

ASP.NET MVC打破了那种规模, since ASP.NET MVC’s requests are handled by
controller classes (compiled into a .NET assembly), there are no
particular files corresponding to incoming
U科雷傲Ls.所以这也就从不路子对应的一定文件了.

You are given complete control of your U君越L schema—that is, the set of
U途乐Ls that are accepted and their mappings to controllers and actions.
上面大家来看望mvc中是怎么定义路径的.

伟德国际1946 2

This is all managed by the framework’s routing
system.那全然是又框架的路线系统管理的.

 

§8.1.1 About Routing and Its .NET Assemblies

The routing system was originally designed for ASP.NET MVC, but it was
always intended to be shared with other ASP.NET technologies,
including Web Forms.路径系统本来是给mvc本人用的,
可是也会被其余asp.net技术使用.
所以路径代码是坐落三个单独的程序集里(System.Web.Routing.dll in .NET
3.5, and simply System.Web.dll in .NET 4),而不是在System.Web.Mvc.dll
中.

 

伟德国际1946 3

§8.2 Setting Up Routes

咱俩来看看路径的布局, 在global.asax.cs文件里

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                "Default", // 路由名称
                "{controller}/{action}/{id}", // 带有参数的 URL
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
            );
        }

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

When the application first starts up (i.e., when Application_Start()
runs), the RegisterRoutes() method populates a global static
RouteCollection object called RouteTable.Routes. That’s where the
application’s routing configuration lives. The most important code is
that shown in bold: MapRoute() adds an entry to the routing
configuration. To understand what it does a little more clearly, you
should know that this call to MapRoute() is just a concise alternative
to writing the following:当应用程序运营的时候,相当于Application_Start()
鱼腥的时候, RegisterRoutes()
静态方法会装入3个叫作RouteTable.Routes的大局静态RouteCollection对象.
也是放置路径配置的地点.MapRoute是路线配置的输入, 为了不难的验证,
大家来举下边的例证

            Route myRoute = new Route("{controller}/{action}/{id}", new MvcRouteHandler())
            {
                Defaults = new RouteValueDictionary(new
                {
                    controller = "Home",
                    action = "Index",
                    id = UrlParameter.Optional
                })
            };
            routes.Add("Default", myRoute);

大家地点的观看的那段代码和系统自动生成的那段代码是一样的.

伟德国际1946 4

 

§8.2.1  Understanding the Routing Mechanism

The routing mechanism runs early in the framework’s request processing
pipeline. Its job is to take an incoming U中华VL and use it to obtain an
IHttpHandler object that will handle the request.
早起的路由机制运作在框架的乞求处理管道. 它的行事就是拔取进来的UCRUISERL,
并用它来获取二个力所能及处理请求的的IHttpHandler 对象

Many newcomers to the MVC Framework struggle with routing. It isn’t
comparable to anything in earlier ASP.NET technologies, and it’s easy
to configure wrong. By understanding its inner workings, you’ll avoid
these difficulties, and you’ll also be able to extend the mechanism
powerfully to add extra behaviors across your whole
application.许多mvc框架的新手对路由的概念改到很思疑.
因为它和过去其余的asp.net技术不一样,而且很不难配置错误.
通过询问它的里边运行,我们就可避防止这一个难点,你也足以通过扩展额外的行为使任何应用程序拓展的更强大.

The Main Characters: RouteBase, Route, and RouteCollection

路由配置主要有一个部分:

  • RouteBase is the abstract base class for a routing entry.
    You can implement unusual routing behaviors by deriving a custom
    type from it (I’ve included an example near the end of this
    chapter), but for now you can forget about it.
  • Route is the standard, commonly used subclass of RouteBase
    that brings in the notions of URL templating, defaults, and
    constraints. This is what you’ll see in most examples.
  • A RouteCollection is a complete routing configuration. It’s
    an ordered list of RouteBase-derived objects (e.g., Route
    objects).

How Routing Fits into the Request Processing Pipeline

When a U奥迪Q5L is requested, the system invokes each of the IHttpModules
registered for the application. 当二个U卡宴L被呼吁,
系统调用每一个在应用程序中早已登记的IHttpModules
.其中一个就是UrlRoutingModule

** 

The Order of Your Route Entries Is Important

If there’s one golden rule of routing, this is it: put
more-specific route entries before less-specific
ones.
假如有个路由布置的黄金规则: 那么就是将十二分路径放在一般路径的前边.
因为系统的非常由的算法是从最上方先导, 而不是找最契合的.

 

§8.2.2  Adding a Route Entry

暗中认同的路由是很一般的, 假诺你想要处理任何品类的U本田UR-VL, 你还亟需做一些手脚.
小编来举个大致的事例, 比如我们想要用U君越L /Catalog来查看那么些连串的享有产品

            routes.Add(new Route("Catalog", new MvcRouteHandler())
            {
                Defaults = new RouteValueDictionary(
                new { controller = "Products", action = "List" }
                )
            });

我们得以用地点的那段代码来贯彻大家的目的. 它可以支持大家落成/Catalog
只怕是 /Catalog?some=querystring, 不过 /Catalog/Anythingelse
那样的url是充裕的.

 

URL Patterns Match the Path Portion of a URL

伟德国际1946 5

 

Meet RouteValueDictionary

A different technique to populate a RouteValueDictionary is to
supply an IDictionary<string, object> as a constructor
parameter, or alternatively to use a collection initializer, as in the
following example:

            routes.Add(new Route("Catalog", new MvcRouteHandler())
            {
                Defaults = new RouteValueDictionary
                {
                    { "controller", "Products" },
                    { "action", "List" }
                }
            });

 

Take a Shortcut with MapRoute()

ASP.NET MVC adds an extension method to RouteCollection, called
MapRoute(). 你会意识那比采取routes.Add(new Route(…)) 方便很多.

            routes.MapRoute("PublicProductsList", "Catalog",
                new { controller = "Products", action = "List" });

In this case, PublicProductsList is the name of the route entry.
It’s just an arbitrary unique string. That’s optional.

 

§8.2.3  Using Parameters

As you’ve seen several times already, parameters can be accepted via a
curly brace syntax. 正像你前面看到的, 参数可以置身{}里,
那里大家加三个color参数到路由中:

            routes.MapRoute(null, "category/{color}",
               new { controller = "Products", action = "List" });

This route will now match URLs such as /Catalog/yellow or
/Catalog/1234, and the routing system will add a corresponding
name/value pair to the request’s RouteData object. On a request
to /Catalog/yellow, for example, RouteData.Values[“color”] would be
given the value yellow
.

 

Receiving Parameter Values in Action Methods

You know that action methods can take parameters. When ASP.NET MVC
wants to call one of your action methods, it needs to supply a value
for each method parameter. One of the places where it can get values
is the RouteData collection. It will look in RouteData’s Values
dictionary, aiming to find a key/value pair whose name matches the
parameter name.

咱俩知道action方法可以带参数. 当mvc想要调用三个action方法,
它须要提供3个value给艺术的参数. 它拿走value的三个地点就是RouteData
collection.
它会在RouteData’s
的键值对中搜寻二个和参数名对应的value.
So, if you have an action method like the following, its color
parameter would be populated according to the {color} segment parsed
from the incoming URL:

所以, 如若你有个action方法像上边那样的,
那么它的color参数就在传出的url中的{color}中

        public ActionResult List(string color)
        {
            // Do something
        }

To be more precise, action method parameters aren’t simply taken
directly from RouteData.Values, but instead are fetched via the
model binding system, which is capable of instantiating and
supplying objects of any .NET type, including arrays and collections.
You’ll learn more about this mechanism in Chapters 9 and 12.
更标准的说,
action方法的参数不仅仅只是简短的平素从RouteData.Values获取.
而是从模型绑定系统中收获,种种.net类型. 你会在第⑧章和12章中打听越多.

 

§8.2.4  Using Defaults

You didn’t give a default value for {color}, so it became a mandatory
parameter. The Route entry no longer matches a request for /Catalog.
You can make the parameter optional by adding to your Defaults object:
在地点的事例中, 大家从没给{color}2个暗许值, 它变成了三个胁制的参数.
路由入口不再匹配/Catalog 请求. 你可以

            routes.MapRoute(null, "Catalog/{color}",
                new { controller = "Products", action = "List", color = (string)null });

那样, 路由就能匹配/Category和/Category/orange了.

如果你想要一个非null 的暗许值, 比如没有null的 int, 你可以显式的钦赐值

            routes.Add(new Route("Catalog/{color}", new MvcRouteHandler())
            {
                Defaults = new RouteValueDictionary(
                new { controller = "Products", action = "List", color = "Beige", page = 1 }
                )
            });

That’s a perfectly fine thing to do; it’s the correct way to set up
RouteData values that are actually fixed for a given Route
entry. For example, for this Route object,
RouteData[“controller”] will always equal “Products”, regardless
of the incoming URL, so matching requests will always be handled by
ProductsController.

这样,不管输入的url是哪些, 匹配请求总会被ProductsController处理.

Remember that when you use MvcRouteHandler (as you do by default
in ASP.NET MVC), you must have a value called controller; otherwise,
the framework won’t know what to do with the incoming request and will
throw an error. The controller value can come from a curly brace
parameter in the URL, or can just be specified in the Defaults object,
but it cannot be omitted.

 

Creating Optional Parameters with No Default Value

就好像暗中认可的路由配置, 我们可以内定暗中认可值UrlParameter.Optional.

            routes.MapRoute(null, "Catalog/{page}",
                new { controller = "Products", action = "List", page = UrlParameter.Optional });

如此, 当访问的U奇骏L有page值的时候, 大家就动用传入的vallue, 假如没有,
那么我们就不想action方法中传任何参数.你大概会思疑,
为啥不用0大概是null 作为默许参数, 上面是它的七个原因:

  • If your action method takes a page parameter of type int, then
    because that type can’t hold null, you would have to supply the
    default value of 0 or some other int value. This means the action
    method would now always receive a legal value for page, so you
    wouldn’t be able to control the default value using the MVC
    Framework’s [DefaultValue] attribute or C# 4’s optional
    parameter syntax on the action method itself (you’ll learn more
    about these in the next chapter).
  • 若果你的action方法有个int类型的page参数,可是它是值类型,
    不大概是null. 所以你必要提供一个暗许值(0或者是任何的值).
    那也以为着action方法总是须求2个官方的值, 所以,
    如若action方法本人行使mvc框架的[defaultvalue]特征或许是C#4的可选参数语法,
    你将无法控制它的类型.(你会在接下去的一章中打探愈来愈多)
  • Even if your action’s page parameter was nullable, there’s a
    further limitation. When binding incoming data to action method
    parameters, the MVC Framework prioritizes routing parameter values
    above query string values (you’ll learn more about value providers
    and model binding in Chapter 12). So, any routing value for
    page—even if it’s null—would take priority and hide any query
    string value called page.
  • 即时你的action的page参数可以是null类型. 这里还有个限制.
    当action方法的参数是binding类型的时候, mvc
    框架会将路由参数优先于查询字符串值.(你会在12章中学到值提供者和模型绑定).
    所以,
    任何为page设置的路由值–即便是null–也会先行于访问page的询问字符串

UrlParameter.Optional化解了那三个难点

 

§8.2.5  Using Constraints

偶尔, 你会想要添加额外的尺度, 以合营特定的route. 比如:

  • 您想匹配get请求, 而不是post请求
  • 局部参数要合作特定的参数(e.g. ID参数必须同盟数字类型)
  • 部分route用来匹配常规的web浏览器发来的呼吁,
    有的匹配iphone发来的同等ULANDL

In these cases, you’ll use the Route’s Constraints property

 

Matching Against Regular Expressions

为了保证参数是数字类型的, 大家运用那样的条条框框:

            routes.MapRoute(null, "Articles/{id}",
                new { controller = "Articles", action = "Show" },
                new { id = @"\d{1,6}" });

如此, route就会匹配 /Articles/1 和 /阿特icles/123456 这两种档次,
而不是别的的,(那里的正则表达式表示的是: 数字类型,1~6个)

 

Matching HTTP Methods

If you want your Route to match only GET requests (not POST
requests), you can use the built-in HttpMethodConstraint class (it
implements IRouteConstraint)—for example:

            routes.MapRoute(null, "Articles/{id}", 
                new { controller = "Articles", action = "Show" },
                new { httpMethod = new HttpMethodConstraint("GET") });

您想匹配什么样的HTTP方法, 就把它放到HttpMethodConstraint构造器中,
比如,new HttpMethodConstraint(“GET”, “DELETE”).

你要留心的是 HttpMethodConstraint[HttpGet] and
[HttpPost]
无关

 

Matching Custom Constraints

一旦前方的两种都不可以餍足你, 那么您还是能完结它的.
举个例证,假诺您想建立二个只允许web浏览器进入的路由入口,
你可以创设如下的约束:

        public class UserAgentConstraint : IRouteConstraint
        {
            private string _requiredSubstring;
            public UserAgentConstraint(string requiredSubstring)
            {
                this._requiredSubstring = requiredSubstring;
            }
            public bool Match(HttpContextBase httpContext, Route route, string paramName,
            RouteValueDictionary values, RouteDirection routeDirection)
            {
                if (httpContext.Request.UserAgent == null)
                    return false;
                return httpContext.Request.UserAgent.Contains(_requiredSubstring);
            }
        }

下边的路由只好合营由iphone发起的乞求:

            routes.Add(new Route("Articles/{id}", new MvcRouteHandler()){
                Defaults = new RouteValueDictionary(new { controller = "Articles", action = "Show" }),
                Constraints = new RouteValueDictionary(
                    new { id = @"\d{1,6}", userAgent = new UserAgentConstraint("iPhone") }});

 

§8.2.6  Prioritizing Controllers by
Namespace

§8.2.7  Accepting a Variable-Length
List of Parameters

§8.2.8  Matching Files on the Server’s
Hard Disk

§8.2.9  Using IgnoreRoute to Bypass the Routing System

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{filename}.xyz");
    // Rest of routing config goes here
}

Here, {filename}.xyz is treated as a URL pattern just like in a normal
route entry, so in this example,
the routing system will now ignore any requests for /blah.xyz or
/foo.xyz?some=querystring. (Of course,
you must place this entry higher in the route table than any other
entry that would match and handle
those URLs.) You can also pass a constraints parameter if you want
tighter control over exactly which
URLs are ignored by routing.

此处{filename}.xyz 被视作一个UEscortL模型, 就像是三个平淡无奇的路由入口. 

译文:MVC运用程序中的经典形式

注:该例子没有参预区域

  3.2  UOdysseyL生成详解

View
Code

 在这一章节,主要分析U奥迪Q5L绑定到控制器操作的底层细节,分析底层原理,领悟ASP.NET请求管道。注意,近来路由不仅仅只是ASP.NET
MVC的三个特征了,它已经超(英文名:jīng chāo)越那几个范围,如ASP.NET Dynamic
Data。路由既不包涵MVC的里边知识,也不借助于于MVC。

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

译文:例如,1个带有U奥迪Q5L路径  /产品
的UHavalL映射到七个名为ProductsController的控制器。action参数中的值是调用的操作方法的称呼。贰个饱含U哈弗L路径
  /产品/show
 的U陆风X8L会招致对ProductsController类的Showmethod的调用。

 定义:本性路由就是将路由U本田CR-VL定义在控制器上或控制器内的点子上,而不像古板路由将路由UHavalL定义在RouteConfig.cs中。比较如下

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

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

 

译文:当您定义一个路由时,您可以为1个参数钦定3个暗许值。借使该参数的值没有包括在U奥迪Q3L中,则应用暗中同意值。通过将dictionary对象分配给route类的专断认同属性,可以为路由安装默许值。上面的事例浮现了怎样通过行使MapPageRoute(字符串、字符串、字符串、布尔值、RouteValueDictionary)方法添加具有私行认同值的路由。

     U汉兰达I(Uniform Resource
Identifier)代表联合资源标识符,标识财富的字符串;

A Physical File is Found that Matches
the U帕杰罗L Pattern(找到与U汉兰达L方式匹配的情理文件)

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

Routing Is Explicitly Disabled for a
U帕杰罗L 帕特tern(为U奥迪Q7L方式显式禁用路由)

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

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

   (5)在ASP.NET
MVC中,IRouteHandler是MvcRouteHandler类的一个实例,MvcRouteHandler转而回到多少个兑现了IHttpHandler接口的MvcHandler对象。重临的MvcHandler对象主要用以实例化控制器,并调
       用该实例化的控制器上的操作方法。

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

译文:当发出请求时,U奥迪Q3L被分析为部分和占位符,且变量值被提需求请求处理程序。那一个历程看似于查询字符串中的数据被解析并传递给请求处理程序的法子。在那三种情况下,变量音信都含有在U奥迪Q3L中,并以键值对的款型传递给处理程序。对于查询字符串,键和值都在UPAJEROL中。对于路由,键是UGL450L格局中定义的占位符名称,在U逍客L中只是是值。

伟德国际1946 6

RouteDemoController

  • 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.
  •  译文:您将它们增进到路由集合的一一。

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.

     (3)  便于输入;

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

 性格路由是在ASP.NET MVC
5中新增的,古板路由ASP.NET MVC 1中就有了。

译文:您还是可以钦点路由不应该处理有些U奔驰G级L请求。通过定义一条路由,并点名StopRoutingHandler类应该用于拍卖该形式,从而防止了拍卖某个请求的路由。当二个StopRoutingHandler对象处理请求时,StopRoutingHandler对象会阻塞请求作为路由的其他附加处理。相反,请求是用作ASP.NET
页面来拍卖的,网络页面,Web服务,或其余ASP.NET端点。您可以动用 RouteCollection.Ignore方法。

  • 译文:您为有个别路由提供的其它暗中同意值。
  • Any constraints that you have
    provided for a route.

  • 译文:您为路径所提供的别的自律。

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

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

        ASP.NET 路由分歧于其余 U翼虎L
重写方案。U君越L 重写通过在将请求发送到网页以前实际更改 ULX570L
来处理传入请求。例如,三个使用 U本田CR-VL 重写的应用程序或许会将 U哈弗L 从 /Products/Widgets/ 更改为 /Products.aspx?id=4。其它,U牧马人L 重写常常没有对应的 API
来创立基于形式的 UXC60L。在 U翼虎L 重写中,如若改变了 U中华VL
方式,则必须手动更新包蕴原始 UHighlanderL 的持有超链接。由于
ASP.NET 路由得以从 U宝马X3L 提取值,所以拍卖传入请求时不更改
U路虎极光L。若是必须创设三个 U酷威L,则将参数值传递到为您生成 U陆风X8L
的主意中。若要更改 U本田UR-VL
方式,请在某地点变动该格局,您在应用程序中开创的基于该格局的具有链接将自动使用新方式。

伟德国际1946 7

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:

伟德国际1946 8

   
如ULANDL:{Controller}/{action}/{id}。当请求/albums/list/123扩散时,该路由就会尝试匹配传入的呼吁,要是匹配成功,它就创办1个字典,其中蕴藏了从U奔驰G级L中分析出的新闻。确切地讲,路由还会向Values字典中为ULX570L中的逐个路由参数添加2个键;对于古板路由{Controller}/{action}/{id},Values字典中应当至少含有两个键,分别是Controller,action和id,即使传入的U福睿斯L是对/albums/list/123的呼吁,路由就会分析该请求的UHavalL,并为字典的键提供值。本例中,字典中“Controller”键的值为albums,”action”键的值为“list”,”id”键的值是“123”;对于特性路由MVC使用DataTokens字典来储存更可依赖的音信,而不是操作名称字符串。具体来说,它包蕴1个操作描述符列表,那么些描述符直接指向路由匹配时或然行使的操作方法。对于控制器级其他特色路由,列表大校有持续3个操作。在总体MVC中都有拔取的RequestContext的RouteData属性保存着外面路由值。

伟德国际1946 9

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.

id是bikes.

(1)路由集合通过RouteBase.GetVirtualPath方法遍历每一种路由并访问:“可以生成给定参数的URubiconL吗”,那几个进度看似于在路由与传播请求匹配时所接纳的相当逻辑。

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

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

 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.

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

1.4 U奇骏L应有所特色

8 参考文献

【04】Professional Asp.net MVC 5

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

译文:

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

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

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

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

伟德国际1946 10伟德国际1946 11

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

RouteConfig.cs

2 路由概述(古板路由)

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

 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 }

 (2)路由体制查看须求的路由参数(即没有提供路由参数的暗中同意值),并保证提供的路由值字典为每三个须求的参数提供2个值,否则,ULX570L生成程序就会及时截至,并重临空值。

测试结果

     (5)
 应该是“可破解的”,用户可以通过移除U君越L的最终,进而到达更高层次的音信系列布局;

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

伟德国际1946 12

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

     
 注释:能源是二个抽象概念,既能够指三个文件,也得以指方法调用的结果或服务器上的有些别的故事情节。

当然, 你也可以友善下载RouteDebugger.dll,
引用到web项目中, 然后手动在web.config中投入

9   版权

     U路虎极光L (Uniform Resource
Locator)代表统一财富定位符,网络上专业能源的地方;

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.

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

     (2)  简短;

伟德国际1946 13

2.3  路由定义

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

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

 6.2 Class
Reference( 路由涉及到的重中之重类)

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.

 3.1 U大切诺基L生成的高层系概述

/Controllers/NewFolder1/RouteDemo

 由于篇幅有限,路由章节就写到那,当然,还有许多情节没写,如路由安顿文件、路由平安设置、自定义路由约束等,留给读者朋友们去探讨吗。

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

     (2)ASP.NET
MVC中,平时地,UCR-VL映射并非映射到实际磁盘上的情理文件,那是依据ASP.NET路由性情,首要有五个进程,即U奥德赛L映射和U本田CR-VL生成(接下去讲解)。在ASP.NET路由中,您可以定义U福睿斯L方式,该形式涵盖在处理UCRUISERL请求时利用的值的占位符。在运营时,运用程序名称前面的UOdysseyL部分按照你所定义的U索罗德L形式分析为离散值。例如,在哀告http://server/application/Products/show/beverages时,路由分析器可以将值Products、show和beverages传递给请求的处理程序。相反,在一个不由URL路由管理的请求中,/Products/show/beverages片段将被解释为运用程序中的一个文件的路径。
  

3 路由概述(性情路由)

译文:下表突显了默许的U凯雷德L方式,它显得了由暗中同意路由拍卖的U途睿欧L请求的言传身教。

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.

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

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.

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

 
译文:路线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.

     
(1)从命名角度,U卡宴I标识财富且唯一,U瑞鹰L标识财富地址
,UENVISIONN标识财富名称;

 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                 

   
调用GetRouteData方法会重临RouteData的三个实例。RouteData中含有了有关匹配请求的路由音信。

伟德国际1946 14

译文:在MVC运用程序中,路由U汉兰达L形式平时蕴含控制器和动作占位符。

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.

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(字符串、字符串、字符串)方法。

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

译文:带有情势财富的路由axd/pathInfo,被用于防止Web财富文件的呼吁,例如WebResource,axd或ScriptResource传递到控制器。对于IIS
7.0,不要求任何文件名称扩张。对于IIS
6.0,您必须添加.mvc文件扩大名到UCRUISERL格局中,如上面的例子:

 译文:上边的事例显示了在大局中创设暗许MVC路由的代码。asax文件,正如在Visual
Studio项目模板中定义的MVC应用程序。

 伟德国际1946 15

 只要启用RouteDebugger,它就展现从(在地点栏中)当前恳请U奥迪Q5L中提取的路由数据。如此,可以在地点栏中输入种种U昂科威L,并查阅输入的UHavalL能与哪些路由十分,在页面底部,它还会来得3个分包应用程序定义的所用路由列表,那样可以查看定义的哪位路由可以与近日UOdysseyL相匹配。

译文:下边的言传身教展现了怎么样采用MapPageRoute方法创制一条路子,该路由限制了地点和年参数中可以分包的值。(在MVC应用程序中,您将运用map路由艺术。)

译文:您可以因此包括常量来防止格局中的歧义,例如
annual/{report}/{year} and monthly/{report}/{year}/{month}。

2.1  WebForm URL与Route URL

2.12 路由二义性

译文:在某个情状下,即便在Web站点启用时,ASP.NET
路由也不处理请求。本有的讲述了一些风貌,其中路由不处理请求。

        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.

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

途径2:报告/年,年暗中认同值。

     (4)  可以反映出站点布局;

     
译文:你能够由此将路由对象添加到RouteTable类的静态路由属性中的格局将路由添加到应用程序中。路由属性是贰个为应用程序存储全部路由的路由对象。在MVC应用程序中,您日常不必要编制代码来添加路由。VS项目模板为MVC蕴含了先行布置的UWranglerL路由。那几个都以在MvcApplication类中定义的,被定义在Global.asac
文件中。

伟德国际1946 16伟德国际1946 17

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

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:

 
(1)开发人士调用像Html.ActionLink或Url.Action之类的章程,这个主意反过来再调用RouteCollection.GetVirtualPath方法,并向它传递二个RequestContext对象、1个含有值的字典以及用于采纳生成U奥迪Q3L的路由名称(可选参数)。

 

译文:UTucsonL方式大概含有文字值和变量占位符(称为ULacrosseL参数)。文字和占位符位于USportageL的一些中,由斜杠(/)字符分隔。

2.7 Setting Default Values for U哈弗L
Parameters(为U酷威L参数设置暗中同意值)

     
(2)从数学关系:U卡宴I=UTiguanL+UTucsonN+U智跑L∩U福睿斯N;很不难看到,U奥德赛L一定是U路虎极光I,但UPRADOI不自然是U景逸SUVL,同理,UXC60N一定是UKugaI,但U酷威I不肯定是U奔驰M级N;

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

2.2  ASP.NET 路由与 URL 重写

3 路由生成UKoleosL

 1.2 U索罗德I、U揽胜L和ULacrosseN三者之间的关系图

译文:除了通过U大切诺基L中参数的数码来匹配U安德拉L请求外,还是可以够内定参数中的值满足特定的牢笼原则。若是贰个U奥迪Q5L包涵的值超出了路由的封锁,那么该路由就不会被用来拍卖请求。您添加了有的约束,以确保U福特ExplorerL参数包括在您的应用程序中劳作的值。
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.

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

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"}});
}

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

伟德国际1946 18

(5)路由拾叁分成!未来可以透过翻看每一个路由参数,并尝试运用字典中的对应值填充相应参数,进而生成U兰德酷路泽L。

伟德国际1946 19

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

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

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

若果U索罗德L不包容在RouteTable集合中定义的此外路由对象,ASP.NET路由不处理请求。相反,处理被传送给多个ASP.NET
Page ,Web服务,或其余ASP.NET端点。

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

 4.1 高层次请求的路由管道

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.

译文:当接到到二个伸手时,它被路由到UrlRoutingModule对象,然后发送到MvcHandler
HTTP处理程序。MvcHandler
HTTP处理程序通过向ULANDL中的控制器值添加后缀“控制器”来显然要调用哪个控制器,以鲜明控制器的连串名称,该控制器将处理请求。U奥迪Q3L中的操作值决定调用哪个操作方法。

伟德国际1946 20

途径1:报告/年/月,年和月暗中认同值。

下表突显了卓有效用的路由格局和与格局匹配的U安德拉L请求示例。

事例引入

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

      本解析基于1.2
ULacrosseI、UPRADOL和U昂科雷N三者之间的涉及图。

RouteConfig.cs

在窗口中输入:Install-Package
routedebugger

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

伟德国际1946 21

     
 平常情形下,U汉兰达I代表同意财富标识符(Uniform Resource
Identifier)。U君越I是标识了3个能源的字符串。从技术角度看,全数U昂CoraL都是U昂科雷I。W3C认为“ULacrosseL是1个业余的定义,但它丰富实用:U卡宴L是U途睿欧I的一种档次,它通过代表自身的机要走访机制来标识财富”,换句话说,U大切诺基I是某种财富的标识符,而ULANDL则为取得该能源提供了现实的音讯。

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

6 与路由相关的第②命名空间和类

能够回顾为如下流程图:

 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 }

4.2 路由数量

测试结果

译文:即使您想要路由拍卖全数请求,甚至指向文件的呼吁,您可以经过设置RouteCollection对象的性质RouteExistingFiles为true, 
以此来覆盖暗中同意值。当您将以此值设置为true时,匹配定义格局的享有请求都由路由拍卖。

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

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

/ query / { queryname } { * queryvalues
}

 如在VS二〇一三行使MVC模板创设项目时,自动生成类RouteConfig.

5 路由调试

 

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);
    }
}

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}.

 

7 总结

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.

1 URI、URL与URN

伟德国际1946 22

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.

2.8 Handling a Variable Number of Segments
in a U索罗德L 帕特tern(在UOdysseyL情势中处理可变多少的段)

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.

译文:

 从内容上来看,性格路由的内容与历史观路由大致,同样有路由UXC90L、路由值、控制器路由、路由约束和路由私自认同值等。鉴于篇幅限制,在此间就简单的概述一下,不作详细阐释,中期有时间或许有情侣要求,再论述。

1.5  小结

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

伟德国际1946 23

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.

译文:暗中同意情况下,路由不处理映射到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.

译文:有时你必须处理包蕴贰个可变多少的U帕杰罗L段的U奥迪Q5L请求,其中。当你定义1个路由时,您可以指定,倘诺二个UHighlanderL的局地比情势中有更加多的段,那么额外的段被认为是末了一有个其余一某些。要以那种措施处理额外的段,您可以用星号(*)标记最后一个参数。那被称作3个含糊的参数。三个饱含全数参数的路由也将相当不包括最终多个参数的任何值的url。下边的言传身教显示了1个拾贰分未知数量的段的路由情势。

 Typical URL Patterns in MVC
Applications

路由2永远不会处理请求。第三条可能是针对每月报告的,而路由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.

 1.1 URI、URL和URN定义 

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

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

译文:约束是由此采取正则表明式或接纳完成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.

4 路由绑定到操作

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

2.4 URL Patterns(URL模式)

/Controllers/RouteDemo

2.6 Adding Routes to an MVC
Application

1.3 对ULacrosseI、U奥迪Q3L和U普拉多N三者之间解析

     (6)  持久、无法更改

(2)如若几个路由可以应对上边的题材(即匹配),那么它就会回来八个带有了ULX570L的VirTualPathData实例以及其余匹配的音讯。否则,它就回到空值,路由体制移向列表中的下3个路由。

译文:在UQashqaiL方式中,通过将它们封装在括号(以及)中来定义占位符。您可以在三个段中定义多少个占位符,不过必须用文字值分隔它们。例如,语言-国家/行动是一种有效的门径情势。不过,语言国家/action不是多个实惠的情势,因为占位符之间一贯不文字值或分隔符。由此,路由不可以控制将语言占位符的值与国家占位符的值分隔开。

 伟德国际1946 24

Index

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.

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

   
 伟德国际1946 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.NewFolder1
 8 {
 9     public class RouteDemoController : Controller
10     {
11         //
12         // GET: /RouteDemo/
13         public ActionResult Index()
14         {
15             return Content("路由二义性测试");
16         }
17     }
18 }

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

译文:当路由拍卖UKoleosL请求时,它尝试将请求的U奥迪Q5L与路由格外。将U奔驰G级L请求匹配到路由取决于以下条件:

译文:倘若您提供一个字符串,那么路由将字符串作为二个正则表明式来拍卖,并经过调用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.

抑或也可以行使NuGet很便宜的装置RouteDebugger,在品种方面右键-“Manage
NuGet Packages”-“Online”输入”RouteDebugger”然后”Install”.

译文:就算你提供三个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.)

 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 }
1 @inherits System.Web.Mvc.WebViewPage
2 
3 <h2>RouteDebugger调试</h2>

其次个重载接受两个参数,其中首个参数是路由名称。在路由集合中路由名称是唯一的,约等于说,没有多个不等的路由具有同样的名目。当指定了路由名称时,路由集合就不需求循环遍历各种路由,相反,它可以即时找到钦赐名称的路由,并移向下面的手续(2)。若是找到的路由不或许匹配钦赐的参数,该办法就会回来空值,并且不再匹配其余路由。

二义性德姆o目录结构

 

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.

     U酷威N(Uniform Resources
Name)代表统一财富名称,互连网上财富的称号;

设置教程如下:

尽管请求中不够3个参数,则运用暗中认同值。因而,它们得以导致一条匹配您没有预料到的伸手的路由。例如,借使您添加了以下格局:

     
 译文:路由是一种被映射到某些处理程序的UOdysseyL情势。处理程序可能是三个物理文件,如在WebForms运用程序中的aspx文件。处理程序也说不定是二个处理请求的类,如MVC应用程序中的控制器。要定义路由,您可以通过点名U牧马人L形式、处理程序和路线的称谓来成立路由类的实例。

伟德国际1946 26

View
Code

伟德国际1946 27

 
路由的为主是2个卓殊简单的算法,该算法基于3个由RouteCollection类和RouteBase类组成的粗略抽象对象。可以行使各种主意来生成ULacrosseL,但这一个形式都是调用RouteCollection.GetVirtualPath的贰个重载方法而终结。RouteCollection.GetVirtulPath方法公有多个重载版本,上面的代码体现它们的方式签名:

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.

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  

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

行动是show.

 (3)一些路由大概包蕴没有对应路由参数的暗许值。如路由只怕为category键提供暗中认同值“pastries”,但是cateory不是路由UTucsonL的1个参数,那种状态下,要是用户传入的路由值字典为category提供了贰个值,那么该值必须匹配category的暗许值。

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.

 6.1  路由涉及的命名空间

伟德国际1946 28伟德国际1946 29

译文:上面的以身作则展示了来自.Globalasax文件的代码,该代码添加了贰个路由对象,该目的定义了五个名为action和品种称号的UPAJEROL参数。具有指定形式的url被定向到名为分类.aspx的情理页面。

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.

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

 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 }

伟德国际1946, 

2.11 How U汉兰达Ls Are Matched to
Routes(url怎么样与路由杰出)

控制器products.

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

 

  • 谢谢您的翻阅,若有不足之处,欢迎指教,共同学习、共同升高。
  • 博主网址:http://www.cnblogs.com/wangjiming/。
  • 极少一些文章利用读书、参考、引用、抄袭、复制和粘贴等多种艺术组成而成的,一大半为原创。
  • 如你喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:二零一四177728@qq.com。
  • 可以转发该博客,但无法不盛名博客来源。

View
Code

 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 }

相关文章