博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web Api 的 路由机制
阅读量:4474 次
发布时间:2019-06-08

本文共 3078 字,大约阅读时间需要 10 分钟。

ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务。 ASP.NET Web API 是一种用于在 .NET Framework 上构建 RESTful 应用程序的理想平台。

所以我们要想学习web api 就要去了解它的路由机制。MVC和web api的路由机制的主要区别是web api 使用的是http 方法而不是url 的路径。本文就演示一下web api 是怎样在controller 里映射 http 请求的。

web api 路由

    在 web api 中 controller 是用来操作http 请求的。它里面的action 方法 对应不同的http 请求的方法。当 web api 收到一个http 请求的
时候 ,路由表就会将请求映射到对应的action 方法中。
路由表的定义是在 App_Start文件夹的WebApiConfig.cs类中,路由的定义其实和mvc 的差不多的。

1 public static void Register(HttpConfiguration config) 2 { 3 // Web API configuration and services 4  5 // Web API routes 6 config.MapHttpAttributeRoutes(); 7  8 config.Routes.MapHttpRoute( 9 name: "DefaultApi", //这个可以随意命名10 routeTemplate: "api/{controller}/{id}",//web api 的地址11 defaults: new { id = RouteParameter.Optional }12 );13 }

 

在 Global.asax 中注册 路由。

1 protected void Application_Start()2 {3 AreaRegistration.RegisterAllAreas();4 5 WebApiConfig.Register(GlobalConfiguration.Configuration);//注册 api 路由 必须写在mvc 路由注册之前否则会找不到。6 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);7 RouteConfig.RegisterRoutes(RouteTable.Routes);8 }

 

当web api 框架收到http 请求的时候,它会尝试的去从路由表中的模板中匹配这个URL,如果不匹配将会显示404的错误。比如我们注册的这个模板就

会匹配一下的地址:

api/WebApi

api/WebApi/2222
api/Home/werwrwe

下面的就不会匹配,因为他们少了api/这个参数:

WebApi

WebApi/2222
Home/werwrwe

这个api/的参数是为了避免和mvc 的 路由有所冲突,当然你可以随意的去命名。

 一旦请求的地址被匹配,web api 将会选择相对应controller 和 action

  • 1,模板中的{controller}将对应请求地址中的controller。
  • 2,web api 将会根据http 请求的方法来找到以这个方法的名字开头的 action ,比如说如果请求的是GET 方法,web api 就会找 以get 开头 action,getname getdata 等等。仅仅适用于 GET,POST,PUT,DELETE这四种方法。当然还可以设置其他的方法,需要在controller 上添加属性。
  • 3,模板中的占位符比如{id} 用来匹配传进来的参数的。

比如 :

1 public class TestController : ApiController2 {3 public IEnumerable
GetAllData() { }4 public TestModel GetDataById(int id) { }5 public HttpResponseMessage Delete(int id){ }6 public HttpResponseMessage Post(TestModel test){}7 public HttpResponseMessage Put(TestModel test){}8 }

下面是每个http 请求对应的 action 方法:

 

 Http 请求方法  对应的 action     url   参数  操作
 GET    GetAllData/GetDataById   api/webapi/1  1  获取
POST     Post    api/webapi                     添加                    
DELETE  Delete   api/webapi    删除
PUT  Put   api/webapi    更新 

 

 

 

 

 

设置action 特性来接受http 请求

这个是接受get 请求的,action 的名字可以不用get 开头。

1 public class TestController : ApiController2 {3 [HttpGet]4 public IEnumerable
Find() { }5 }

 

还可以接受那四个请求之外的http 请求或者多个请求:

1 public class TestController : ApiController2 {3 [AcceptVerbs("GET", "HEAD")]4 public IEnumerable
Find() { }5 6 [AcceptVerbs("MKCOL")]7 public void Deatil() { }8 }

 

我们还可以按照mvc 的方式来定义 web api 的模板,比如:

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

 

它就可以和api/test/find 相匹配。

我们还可以在action 上定义action 的名字:

1 public class TestController : ApiController2 {3 [AcceptVerbs("GET", "HEAD")]4 [ActionName("test")]5 public IEnumerable
Find() { }6 }

 那么api/test/test 就可以进入上面的那个方法。

如果设置NoAction

1 public class TestController : ApiController2 {3 4 [NonAction]5 public IEnumerable
Find() { }6 }

 那么web api 就不会认为它是一个 action 即使与模板匹配也不会被调用。

 

转载于:https://www.cnblogs.com/ListenCode/p/4211679.html

你可能感兴趣的文章
jQuery实战之仿淘宝商城左侧导航效果
查看>>
AC日记——「SCOI2016」幸运数字 LiBreOJ 2013
查看>>
unmount
查看>>
数据库连接池
查看>>
javascript获得和设置以及移除元素属性的三个方法
查看>>
windwos iis 7.5 使用html 报405错误
查看>>
网页中的数据导出问题(word文档等格式)
查看>>
HDOJ1696 Pie【二分】----武科大ACM暑期集训队选拔赛8题
查看>>
LintCode: Identical Binary Tree
查看>>
【分享】366tool在线解析微信小说域名防封API接口的实现原理
查看>>
(转)Objective-C的单例模式(singleton)
查看>>
linux下socket函数之listen的参数backlog
查看>>
C++习题 复数类--重载运算符+
查看>>
兼容IE的getElementsByClassName()方法
查看>>
C04 模块化开发
查看>>
晶晶赴约会(东方化改题+现写的题解)
查看>>
关于selenium的8种元素定位
查看>>
了解使用nginx
查看>>
AC自动机及KMP练习
查看>>
java_2018_Day7_形式参数问题
查看>>