它将以此请求路由到一个Action,API使用的是HTTP方法

Routing Tables路由表

    在Asp.Net Web
API中,一个控制器就是一个拍卖HTTP请求的类,控制器的public方法就被叫做action方法或简捷的Action。当Web
API接收到一个呼吁的时候,它将那个请求路由到一个Action。

        注意:Web API的路由与Asp.Net
MVC的路由是万分相像的。主要分化就是Web
API使用的是HTTP方法,而不是URI路径来抉择Action

   为了确定哪些Action被调用,那些框架使用了一个注册表。Visual
Studio的Web API的花色模板会创建一个默许路由:

1   config.Routes.MapHttpRoute(
2                 name: "DefaultApi",
3                 routeTemplate: "api/{controller}/{id}",
4                 defaults: new { id = RouteParameter.Optional }
5 );

以此路由是在WebApiConfig文件中定义的,该公文位于App_Start目录

图片 1

  当Web
API框架接收到一个HTTP请求时,它会准备依照路由表中的一个路由模板来匹配其URI。如若无路由很是,客户端会接收到一个404(未找到)错误。例如,以下URI与那么些默许路由的协作

  • /api/product
  • /api/product/1
  • /api/product?category=category

不过,以下URI就不合营,因为它缺乏“api”字段

  • /product/1     

        注意:在路由中采取“api”的原故是为着幸免与ASP.NET
MVC的路由龃龉。通过那种办法,可以用“/product”进入一个控制器,而“/api/product”进入一个Web
API控制器。当然,如若您不喜欢那种约定,也足以修改那几个默许路由表。

     一旦一个匹配的路由被发觉,Web API便会接纳相应的Controller和Action。

         1.为了找到Controller,Web
API会把“控制器”加到{Controller}变量的值

         2.为了找到Action,Web
API会查找HTTP方法,然后搜索一个名称以HTTP方法名早先的法子。例如:对于Get请求,Web
API会查找一个以“Get..”早先的Action,那种约定只使用于GET,POST,PUT,DELETE方法,通过在Controller上行使attribute,你可以启动其余的HTTP方法

       
 3.路由模板中其余的占位变量;例如{id},将会被映射成Action的参数。

NonActions

为了防患一个主意被当作Action所请求,可以动用NonAction注明属性。它对框架发送信号:那几个方法不是以一个Action,尽管它或者与路由规则匹配

1 [NonAction]
2 public void IsNoAction();

Route Templates

   路由模板看起来好像一个URI路径,但它可以具有占位符,并用{}来提醒:

"api/{controller}/public/{category}/{id}"

当创造一个路由的时候,你可以为某些或享有占位符提供默许值

defaults: new { category = "all" }

您可以提供约束,它界定URI片段怎么样与占位符匹配

constraints: new { id = @"\d+" }   // 只有在“id”是一个或多个数字时才匹配

 
上边语句是因而正则表明式来限制部分的取值,上边的注释表明id片段只卓绝一个或多个数字,由此URI中id片段必须是一个数字才能与这几个路由进行匹配。

 

 
这些框架试图把URI路径中的片段与那几个模板举行匹配。模板中文字必须从严匹配。一个占位符可以匹配任何值,除非你指定了自律。那几个框架不会URI其它的片段,例如主机名或然一个查询字符串。那个框架会挑选路由表中首个门当户对的路由。

   那几个有四个与众分歧的占位符:“{Controller}”和“{Action}”。

       {Controller}提供控制器名

       {Action} 提供动作名。在Web API中,寻常的预约是忽视{Action}的。

 

      HTTP方法

     
替代利用HTTP方法的命名约定,你可以分明的为一个Action指定HTTP方法,通过以HttpGet,HttpPost,HttpPut大概HttpDelete属性来对Action方法举办修身

      在下列示例中,FindProduct方法被映射到GET请求

1 [HttpGet]
2 public Product FindProduct(int id)
3 {
4    return repository.Get(id);
5 }

拔取方面代码时要求先注释下面写的GetProduct(int id);

图片 2

因为只要不注释 Web API会匹配到请求匹配的多少个操作错误

图片 3

Web API允许一个Action对应五个HTTP方法;

 1 [AcceptVerbs("GET","POST","HEAD")]
 2 public Product FindProduct(int id)
 3 {
 4     return repository.Get(id);
 5 }
 6 [AcceptVerbs("MKCOL")]
 7 public void MakeCollection()
 8 {
 9 
10 }

    首个形式:提醒该Action接收HTTP的GET,POST和HEAD方法。

   
第四个主意:WebDAV方法,(基于Web的分布式作品与版本控制的HTTP方法,是一个恢弘的HTTP方法,MKCOL时隶属于WebDAV的一个方法,它在URI指定的地点创造集合)

      HTTP方法

     
替代利用HTTP方法的命名约定,你能够显著的为一个Action指定HTTP方法,通过以HttpGet,HttpPost,HttpPut或者HttpDelete属性来对Action方法开展修身

      在下列示例中,FindProduct方法被映射到GET请求

1 [HttpGet]
2 public Product FindProduct(int id)
3 {
4    return repository.Get(id);
5 }

行使方面代码时索要先注释上边写的GetProduct(int id);

图片 4

因为若是不注释 Web API会匹配到请求匹配的五个操作不当

图片 5

Web API允许一个Action对应三个HTTP方法;

 1 [AcceptVerbs("GET","POST","HEAD")]
 2 public Product FindProduct(int id)
 3 {
 4     return repository.Get(id);
 5 }
 6 [AcceptVerbs("MKCOL")]
 7 public void MakeCollection()
 8 {
 9 
10 }

    第二个章程:指示该Action接收HTTP的GET,POST和HEAD方法。

   
第二个法子:WebDAV方法,(基于Web的分布式小说与版本控制的HTTP方法,是一个扩充的HTTP方法,MKCOL时隶属于WebDAV的一个措施,它在URI指定的岗位创造集合)

Defaults(默认值)

  即便您提供默许值,那么那些路由突出紧缺这个片段的URI。例如

1 routes.MapHttpRoute(
2     name: "DefaultApi", 
3     routeTemplate: "api/{controller}/{category}", 
4     defaults: new { category = "all" } 
5 );

     
 这个URI“http://localhost/api/products”与这个路由是匹配的。“{category}”片段将赋成了默认值“all”。

 Route Dictionary(路由字段)

   
 假若这么些框架发现了一个同盟的URI,它会创制包罗逐个占位符值的字典。那一个键值是不带{}的占位符名称。那些值取自于URI路径或是默许值。那个字段被存在IHttpRouteData对象中。在匹配路由阶段,这些特殊的{Controller}和{Action}占位符的拍卖和其余占位符是一样的,它们用别的的值被概括的仓储在字典中。

     
在默许值中能够行使尤其的RouteParameter.Optional值。假使一个占位符被赋予了这几个值,那么那些值将不会被添加到字典中,例如

1 routes.MapHttpRoute( 
2     name: "DefaultApi", 
3     routeTemplate: "api/{controller}/{category}/{id}", 
4     defaults: new { category = "all", id = RouteParameter.Optional } 
5 );

对此URI路径“api/product”,路由字典将富含:controller:”product”,category:”all”

但是,对于”api/product/toys/123“,路由字典将涵盖:controller:”product”,category:”toys”

 

以此默许值也得以分包未出现的路由模板中的值。若那条路由万分,则该值会被储存在路由字典中。例如

1 routes.MapHttpRoute( 
2     name: "Root", 
3     routeTemplate: "api/root/{id}", 
4     defaults: new { controller = "product", id = RouteParameter.Optional } 
5 );

假若URI路径是”api/root/7“,字典准将包括多少个值:controller:”product”,id:”8″。

Defaults(默认值)

  若是你提供默许值,那么那几个路由格外缺乏这几个部分的URI。例如

1 routes.MapHttpRoute(
2     name: "DefaultApi", 
3     routeTemplate: "api/{controller}/{category}", 
4     defaults: new { category = "all" } 
5 );

     
 这个URI“http://localhost/api/products”与这个路由是匹配的。“{category}”片段将赋成了默认值“all”。

 Route Dictionary(路由字段)

   
 即使那些框架发现了一个匹配的URI,它会创立包罗各个占位符值的字典。这几个键值是不带{}的占位符名称。那么些值取自于URI路径或是默许值。这些字段被存在IHttpRouteData对象中。在匹配路由阶段,这一个特殊的{Controller}和{Action}占位符的处理和其余占位符是一样的,它们用此外的值被概括的仓储在字典中。

     
在默许值中得以采纳异乎日常的RouteParameter.Optional值。如若一个占位符被赋予了这一个值,那么那个值将不会被添加到字典中,例如

1 routes.MapHttpRoute( 
2     name: "DefaultApi", 
3     routeTemplate: "api/{controller}/{category}/{id}", 
4     defaults: new { category = "all", id = RouteParameter.Optional } 
5 );

对于URI路径“api/product”,路由字典将涵盖:controller:”product”,category:”all”

而是,对于”api/product/toys/123“,路由字典将涵盖:controller:”product”,category:”toys”

 

本条默许值也得以分包未出现的路由模板中的值。若那条路由十分,则该值会被储存在路由字典中。例如

1 routes.MapHttpRoute( 
2     name: "Root", 
3     routeTemplate: "api/root/{id}", 
4     defaults: new { controller = "product", id = RouteParameter.Optional } 
5 );

一经URI路径是”api/root/7“,字典校官含有五个值:controller:”product”,id:”8″。

Routing Variations路由变化

Routing Tables路由表

    在Asp.Net Web
API中,一个控制器就是一个拍卖HTTP请求的类,控制器的public方法就被叫做action方法或简捷的Action。当Web
API接收到一个呼吁的时候,它将以此请求路由到一个Action。

        注意:Web API的路由与Asp.Net
MVC的路由是特别相似的。主要不一致就是Web
API使用的是HTTP方法,而不是URI路径来挑选Action

   为了确定哪些Action被调用,那么些框架使用了一个注册表。Visual
Studio的Web API的花色模板会创建一个默许路由:

1   config.Routes.MapHttpRoute(
2                 name: "DefaultApi",
3                 routeTemplate: "api/{controller}/{id}",
4                 defaults: new { id = RouteParameter.Optional }
5 );

那么些路由是在WebApiConfig文件中定义的,该公文位于App_Start目录

图片 6

  当Web
API框架接收到一个HTTP请求时,它会准备根据路由表中的一个路由模板来匹配其URI。如若无路由卓殊,客户端会接收到一个404(未找到)错误。例如,以下URI与那个默许路由的至极

  • /api/product
  • /api/product/1
  • /api/product?category=category

不过,以下URI就不匹配,因为它缺乏“api”字段

  • /product/1     

        注意:在路由中选择“api”的来头是为了防止与ASP.NET
MVC的路由冲突。通过那种艺术,能够用“/product”进入一个控制器,而“/api/product”进入一个Web
API控制器。当然,如果您不希罕那种约定,也得以修改这几个默许路由表。

     一旦一个匹配的路由被发现,Web API便会挑选相应的Controller和Action。

         1.为了找到Controller,Web
API会把“控制器”加到{Controller}变量的值

         2.为了找到Action,Web
API会查找HTTP方法,然后搜索一个称呼以HTTP方法名开端的不二法门。例如:对于Get请求,Web
API会查找一个以“Get..”开端的Action,那种约定只行使于GET,POST,PUT,DELETE方法,通过在Controller上运用attribute,你可以启动其他的HTTP方法

       
 3.路由模板中任何的占位变量;例如{id},将会被映射成Action的参数。

通过Action名称路由

   在默认的路由模板中,那个Web
API使用HTTP方法去挑选Action。然则,你也得以在URI中创建包蕴Action名的路由

1 config.Routes.MapHttpRoute(
2           name: "DefaultApi",
3           routeTemplate: "api/{controller}/{Action}/{id}",
4           defaults: new { id = RouteParameter.Optional }
5 );

在这一个路由模板中,{action}参数命名了控制器的Action方法。选择那种作风,要求拔取声明属性来指明所允许的HTTP方法。例如,借使你的控制器已有以下措施:

1 [HttpGet] 
2 public string Details(int id); 

 
在那中状态下,一个GET请求“api/Product/Details/1”将会炫耀到那几个Detail方法。那种风格的路由类似于Asp.Net
MVC,而且恐怕与RPC式的API接近。

 
你也可以经过行使ActionName声明属性来掩盖动作名。在以下例子中,有八个Action映射到”api/product/thumbnail/id”。一个支撑GET,一个援助POST

1 [HttpGet]
2 [ActionName("Thumbnail")]
3 public HttpResponseMessage GetThumbnailImage(int id);
4 [HttpPost]
5 [ActionName("Thumbnail")]
6 public void AddThumbnailImage(int id); 

Selecting a Controller

   
 控制器选取是由IHttpControllerSelector.SelectController艺术来拍卖的。那么些措施以HttpRequestMessage实例为参数。并赶回HttpControllerDescriptor

   
 其默许落成是由DefaultHttpControllerSelector类提供的。这些类使用了一种很直接的算法:

           1.查找路由字典的”controller“键。

         
 2.取得这一个键的值,并附加字符串”Controller“,以得到控制器的连串名。

           3.用这一个项目名查找Web API控制器

   
 例如,即使路由字典的键-值对为”controller“=”product“,那么控制器类型便为”ProductController“。如若没有匹配,或多个门当户对,Web
API框架会给客户端重返一个荒谬。

 
 对于步骤3,DefaultHttpControllerSelector使用IHttpControllerTypeResolver接口以获得Web
API控制项目标列表。IHttpControllerTypeResolver的默认落成会回去所有符合以下原则的public类:

  1.  实现IHttpController的类
  2. 黑白抽象类
  3. 名称以”Contoller“结尾的类

Action Selection

      选用了控制器后,Web
API框架会透过调用IHttpActionSelector.SelectAction方法来摘取Action。那些点子以HttpControllerContext为参数,并回到HttpActionDescriptor。

     
这一个默许已毕是由ApiControllerActionSelector类提供的。为了选用一个Action,会寻找以下方面: 

  1. HTTP请求的法子
  2. 其一路由模板的action占位符
  3. 控制器中Action的参数

      在检索拔取算法从前,大家必要驾驭控制器Action的有的事情

         
控制器的怎么方法被看成为Action?当采用一个Action时,这么些框架只考察控制器的public实例方法。而且,它会搞定特殊名称的法门(构造器,事件,操作符,重载符等),以及集成自ApiController的类措施

HTTP Methods

    Web API框架只会接纳与请求的HTTP方法匹配的Action,确定如下

  1. 您可以用申明属性AcceptVerbs,HttpDelete,HttpGet,HttpPost,HttpOptions,HttpPatch,HttpPost或然HttpPut来指定HTTP方法
  2. 若果控制器方法名称以Get,Post,Put,Delete,Head,Options或Patch初始,那么依照那么些约定,该Action将支撑相应的HTTP方法。
  3. 如果以上都不是,那么这几个格局将只协理Post请求。

Parameter Bindings

    参数绑定是指Web API怎么样创立参数值。以下是参数绑定的默许规则:

         1.简单类型取自URI

         2.错综复杂类型取自请求正文

   
不难类型包罗持有”.NET框架简单类型”,别的还有,Date提姆e,Decimal,Guid,String和提姆eSpan。对于各个Action,最多唯有一个参数可以读取请求正文。

   在那种背景下,Action选用算法如下

  1. 开创该控制器中与HTTP请求方法匹配的拥有Action的列表
  2. 万一路由字典有Action条目,移除与该条款值不般配的Action
  3. 打算将Action参数与该URI匹配,如下       

             
a:针对各类Action,得到简单类型的参数列表,那是绑定获得URI参数的地点。该列表不包罗可选参数

             
b:从这些列表中,试着在路由字典或是在URI查询字符串中,找到各个参数的合营。匹配是与大小写无关的,且与参数顺序毫不相关

             
c:选拔那样的一个Action,在列表中的各种参数在URI中有一个同盟

             
d:要是满意这个原则的Action不止一个,选择参数匹配最多的一个。

         4.忽略用[NonAction]诠释属性标注的Action。

   
第3步可能会rang人干扰。其主干思想是,可以从URI,或请求体,或一个自定义绑定来博取参数值。对于来自URI的参数,大家愿意确保URI在其路径(通过路由字典)或询问字符串中实际上包涵一个用于此参数的值。

   例如,考虑以下Action

public void Get(int id)

 
 其id绑定到URI。因而,这一个Action只能够合营在路由字典或询问字符串包括了id值的URI

 
 可选参数是一个见仁见智,因为它们是可选的。对于可选参数,如若绑定不大概透过URI获取它的值,是没什么的。

 
 复杂类型是另一个缘故的两样。一个繁杂类型只可以通过自定义绑定来绑定到URI。然则在那种状态下,Web
API框架不可能超前了解是或不是那个参数被绑定到一个例外的URI。为了调研情形,这些框架需求调用那些绑定。接纳算法的目标是在调用绑定以前基于静态描述来摘取一个Action。因而,负责项目是属于非凡算法之外的。

    Action拔取之后,会调用所有参数绑定。

Summary:

  1.  Action必须协作请求的HTTP方法。
  2. Action名必须匹配路由字典中的Action条目,假设有的话。
  3. 对此Action的一一参数,借使参数来自URI,那么该参数名必须在路由字典或URI查询字符串中可以被找到(可选参数和复杂参数类型除外)
  4. 试图匹配最多多少的参数。最佳匹配或然是一个无参数的点子。

Extended Points

        Web API为路由进程的少数部分提供了增添点。

图片 7

要为以上任一接口提供温馨的落到实处,可使用HttpConfiguration对象的Services集合:

var config = GlobalConfiguration.Configuration;
config.Services.Replace(typeof(IHttpControllerSelector), new MyControllerSelector(config));

 

         

Selecting a Controller

   
 控制器选用是由IHttpControllerSelector.SelectController措施来拍卖的。那么些方法以HttpRequestMessage实例为参数。并重返HttpControllerDescriptor

   
 其默认落成是由DefaultHttpControllerSelector类提供的。这么些类应用了一种很直白的算法:

           1.查找路由字典的”controller“键。

         
 2.赢得这么些键的值,并附加字符串”Controller“,以得到控制器的门类名。

           3.用那几个类型名查找Web API控制器

   
 例如,如若路由字典的键-值对为”controller“=”product“,那么控制器类型便为”ProductController“。要是没有匹配,或多个万分,Web
API框架会给客户端重返一个谬误。

 
 对于步骤3,DefaultHttpControllerSelector使用IHttpControllerTypeResolver接口以得到Web
API控制项目的列表。IHttpControllerTypeResolver的默许达成会回去所有符合以下条件的public类:

  1.  实现IHttpController的类
  2. 黑白抽象类
  3. 名称以”Contoller“结尾的类

Action Selection

      选拔了控制器后,Web
API框架会经过调用IHttpActionSelector.SelectAction方法来抉择Action。那些格局以HttpControllerContext为参数,并赶回HttpActionDescriptor。

     
那么些默认完结是由ApiControllerActionSelector类提供的。为了挑选一个Action,会寻找以下地点: 

  1. HTTP请求的法门
  2. 这一个路由模板的action占位符
  3. 控制器中Action的参数

      在摸索选用算法此前,大家须求掌握控制器Action的一部分事务

         
控制器的什么样措施被看成为Action?当接纳一个Action时,这一个框架只考察控制器的public实例方法。而且,它会去掉特殊名称的艺术(构造器,事件,操作符,重载符等),以及集成自ApiController的类措施

HTTP Methods

    Web API框架只会接纳与请求的HTTP方法匹配的Action,确定如下

  1. 你可以用注脚属性AcceptVerbs,HttpDelete,HttpGet,HttpPost,HttpOptions,HttpPatch,HttpPost大概HttpPut来指定HTTP方法
  2. 万一控制器方法名称以Get,Post,Put,Delete,Head,Options或Patch开首,那么依照那个约定,该Action将扶助相应的HTTP方法。
  3. 若是上述都不是,那么这么些方法将只支持Post请求。

Parameter Bindings

    参数绑定是指Web API如何成立参数值。以下是参数绑定的默许规则:

         1.不难类型取自URI

         2.复杂类型取自请求正文

   
不难类型包涵拥有”.NET框架不难类型”,其它还有,Date提姆e,Decimal,Guid,String和提姆eSpan。对于每一种Action,最五唯有一个参数可以读取请求正文。

   在那种背景下,Action采用算法如下

  1. 成立该控制器中与HTTP请求方法匹配的具备Action的列表
  2. 如若路由字典有Action条目,移除与该条目值不同盟的Action
  3. 打算将Action参数与该URI匹配,如下       

             
a:针对各样Action,得到简单类型的参数列表,这是绑定得到URI参数的地点。该列表不包罗可选参数

             
b:从那个列表中,试着在路由字典或是在URI查询字符串中,找到逐个参数的卓越。匹配是与大小写无关的,且与参数顺序非亲非故

             
c:选取这么的一个Action,在列表中的各个参数在URI中有一个协作

             
d:倘使满足这个规范的Action不止一个,拔取参数匹配最多的一个。

         4.忽略用[NonAction]诠释属性标注的Action。

   
第3步或者会rang人干扰。其基本思想是,能够从URI,或请求体,或一个自定义绑定来得到参数值。对于来自URI的参数,我们希望确保URI在其路径(通过路由字典)或询问字符串中实际上包蕴一个用以此参数的值。

   例如,考虑以下Action

public void Get(int id)

 
 其id绑定到URI。由此,那些Action只好协作在路由字典或询问字符串包含了id值的URI

 
 可选参数是一个差异,因为它们是可选的。对于可选参数,就算绑定无法因而URI获取它的值,是没什么的。

 
 复杂类型是另一个缘故的两样。一个繁杂类型只能通过自定义绑定来绑定到URI。可是在那种景观下,Web
API框架无法提前明白是或不是那几个参数被绑定到一个新鲜的URI。为了调研情状,那么些框架须求调用这几个绑定。选用算法的目标是在调用绑定从前基于静态描述来摘取一个Action。因而,负责项目是属于十分算法之外的。

    Action采取之后,会调用所有参数绑定。

Summary:

  1.  Action必须合营请求的HTTP方法。
  2. Action名必须匹配路由字典中的Action条目,倘使有些话。
  3. 对于Action的次第参数,若是参数来自URI,那么该参数名必须在路由字典或URI查询字符串中可见被找到(可选参数和复杂性参数类型除外)
  4. 试图匹配最多多少的参数。最佳匹配大概是一个无参数的艺术。

Extended Points

        Web API为路由进程的一些部分提供了扩充点。

图片 8

要为以上任一接口提供温馨的兑现,可利用HttpConfiguration对象的Services集合:

var config = GlobalConfiguration.Configuration;
config.Services.Replace(typeof(IHttpControllerSelector), new MyControllerSelector(config));

 

         

因而Action名称路由

   在默许的路由模板中,那些Web
API使用HTTP方法去选用Action。但是,你也得以在URI中开创包括Action名的路由

1 config.Routes.MapHttpRoute(
2           name: "DefaultApi",
3           routeTemplate: "api/{controller}/{Action}/{id}",
4           defaults: new { id = RouteParameter.Optional }
5 );

在这么些路由模板中,{action}参数命名了控制器的Action方法。接纳这种风格,需求动用注明属性来指明所允许的HTTP方法。例如,若是你的控制器已有以下方法:

1 [HttpGet] 
2 public string Details(int id); 

 
在那中状态下,一个GET请求“api/Product/Details/1”将会炫耀到那一个Detail方法。这种作风的路由类似于Asp.Net
MVC,而且恐怕与RPC式的API接近。

 
你也足以由此采纳ActionName申明属性来掩盖动作名。在偏下例子中,有多少个Action映射到”api/product/thumbnail/id”。一个帮衬GET,一个支撑POST

1 [HttpGet]
2 [ActionName("Thumbnail")]
3 public HttpResponseMessage GetThumbnailImage(int id);
4 [HttpPost]
5 [ActionName("Thumbnail")]
6 public void AddThumbnailImage(int id); 

NonActions

为了防备一个办法被当作Action所请求,可以使用NonAction注明属性。它对框架发送信号:那几个办法不是以一个Action,即便它只怕与路由规则匹配

1 [NonAction]
2 public void IsNoAction();

Route Templates

   路由模板看起来好像一个URI路径,但它可以有所占位符,并用{}来提醒:

"api/{controller}/public/{category}/{id}"

当创制一个路由的时候,你可以为某些或享有占位符提供默许值

defaults: new { category = "all" }

您可以提供约束,它界定URI片段如何与占位符匹配

constraints: new { id = @"\d+" }   // 只有在“id”是一个或多个数字时才匹配

 
上面语句是透过正则表达式来限制部分的取值,上边的笺注表明id片段只非常一个或八个数字,由此URI中id片段必须是一个数字才能与那几个路由举办匹配。

 

 
这些框架试图把URI路径中的片段与那几个模板举行匹配。模板汉语字必须严苛匹配。一个占位符能够协作任何值,除非你指定了封锁。那么些框架不会URI其余的一些,例如主机名只怕一个查询字符串。那几个框架会选用路由表中首个门当户对的路由。

   这么些有七个尤其的占位符:“{Controller}”和“{Action}”。

       {Controller}提供控制器名

       {Action} 提供动作名。在Web API中,日常的预订是忽视{Action}的。

 

Routing Variations路由变化

相关文章