并用{}来指示: " api/{controller}/public/{category}/{id} " 当创建一个路由

时间:2022-01-20 09:05:53

标签:

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目录

并用{}来指示: " api/{controller}/public/{category}/{id} " 当创建一个路由

当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的参数。

Routing Variations路由变革       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);

并用{}来指示: " api/{controller}/public/{category}/{id} " 当创建一个路由

因为如果不注释 Web API会匹配到请求匹配的多个操纵错误

并用{}来指示: " api/{controller}/public/{category}/{id} " 当创建一个路由

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指定的位置创建调集)

通过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