ASP.NET Web API实践系列03,路由模版, 路由惯例, 路由设置
ASP.NET Web API的路由和ASP.NET MVC相似,也是把路由放在RouteTable中的。可以在App_Start文件夹中的WebApiConfig.cs中设置路由模版。默认的路由模版是:
routes.MapHttpRoute(name: "API Default",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional });
● 静态片段api,主要用来区分ASP.NET MVC的路由。
● 为什么没有{action}?默认情况下,可以根据惯例找到Action,只要Action的名称符合惯例。
● 占位符变量{id}映射Action的参数。
□ 根据惯例路由
对于GET,POST,PUT,DELETE请求,如果Action的名称以Get, Post, Put, Delete开头,这就是符合惯例,意味着在请求的url中无需指明Action,就可以路由到对应的Action中。
假设有这样的一个api控制器:
public class BooksController : ApiController{public void GetAllBooks(){}public IEnumerable<Book> GetBookById(int id)public HttpResponseMessage DeleteProduct(int id){}}
● 浏览器输入:api/books 并且是Get请求
不带参数,由于GetAllBooks的名称以Get开头,符合惯例,这里会映射到GetAllBooks方法。
● 浏览器输入:api/books/8 并且是Get请求
带参数,会映射到GetBookById(int id)方法上。Web API会把字符串类型的8赋值给int类型的参数变量id。
● 浏览器输入:api/books/8 并且是DELETE请求
映射到DeleteProduct(int id)
● 浏览器输入:api/books 并且是POST请求
没有对应POST请求的Action。返回404状态码。
□ 根据HTTP方法路由
HttpGet, HttpPut, HttpPost, HttpDelete属性可以打在Action上面。
public class BooksController : ApiController{[HttpGet]public Book FindBook(id){}}
如果一个Action允许有多个HTTP方法,就使用AcceptVerbs属性。
public class BooksController ; ApiController{[AcceptVerbs("GET","HEAD")]public Book FindProduct(id){}}
□ 考虑Action的路由
我们可以在WebApiConfig.cs中设置路由的模版,把Action考虑进去。
routes.MapHttpRoute(name: "ActionApi",routeTemplate: "api/{controller}/{action}/{id}",defaults: new { id = RouteParameter.Optional });
在api控制器中:
public class BooksController : ApiController{[HttpGet]public string Details(int id);}
此时,在浏览器中输入类似"api/books/details/8"的格式,才能映射到Details(int id)方法上。
还可以通过ActionName属性给Action取别名:
public class BooksController : ApiController{[ActionName("Sth")]public HttpResposneMessage GetSth(int id);}
如果不想让Action参与到路由中,可以使用NoAction属性。
public class BooksController : ApiController{[NonAction]public string GetSomeData(){}}
总结:在WebApiConfig.cs中定义的路由模版都被放到了RouteTable中了。在Action层面,如果想让请求路由到Action上,可以通过惯例、Http方法属性来实现。
ASP.NET Web API实践系列03,路由模版, 路由惯例, 路由设置的更多相关文章
- ASP.NET Web API实践系列04,通过Route等特性设置路由
ASP.NET Web API路由,简单来说,就是把客户端请求映射到对应的Action上的过程.在"ASP.NET Web API实践系列03,路由模版, 路由惯例, 路由设置"一 ...
- ASP.NET Web API实践系列07,获取数据, 使用Ninject实现依赖倒置,使用Knockout实现页面元素和视图模型的双向绑定
本篇接着上一篇"ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API",尝试获取数据. 在Models文件夹下创 ...
- ASP.NET Web API实践系列05,消息处理管道
ASP.NET Web API的消息处理管道可以理解为请求到达Controller之前.Controller返回响应之后的处理机制.之所以需要了解消息处理管道,是因为我们可以借助它来实现对请求和响应的 ...
- ASP.NET Web API实践系列09,在Fiddler和控制台中模拟GET和POST请求
ASP.NET Web API本质是由一个进程托管的一组类,需要宿主,这个宿主可以是ASP.NET应用程序,可以是MVC项目,可以是控制台应用程序,也可以是自己定制的宿主. 在VS2012中创建一个& ...
- ASP.NET Web API实践系列01,以ASP.NET Web Form方式寄宿
创建一个空的ASP.NET Web Form项目. 右键项目,添加新项,创建Web API控制器类,TestController. 删除掉TestController默认的内容,编写如下: using ...
- ASP.NET Web API 2系列(二):灵活多样的路由配置
1. 导言 路由系统是请求消息进入ASP.NET Web API消息处理管道的第一道屏障,其根本目的在于利用注册的路由对请求的URL进行解析以确定目标HTTPController和Action的名称, ...
- ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API
本篇尝试在现有的ASP.NET MVC 4 项目上增加使用ASP.NET Web API. 新建项目,选择"ASP.NET MVC 4 Web应用程序". 选择"基本&q ...
- ASP.NET Web API实践系列02,在MVC4下的一个实例, 包含EF Code First,依赖注入, Bootstrap等
本篇体验在MVC4下,实现一个对Book信息的管理,包括增删查等,用到了EF Code First, 使用Unity进行依赖注入,前端使用Bootstrap美化.先上最终效果: →创建一个MVC4项目 ...
- ASP.NET Web API实践系列11,如何设计出优秀的API
本篇摘自:InfoQ的微信公众号 在设计API的时候考虑的问题包括:API所使用的传输协议.支持的消息格式.接口的控制.名称.关联.次序,等等.我们很难始终作出正确的决策,很可能是在多次犯错之后,并从 ...
随机推荐
- oracle锁表查询,资源占用,连接会话,低效SQL等性能检查
查询oracle用户名,机器名,锁表对象 select l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, l.os_user ...
- NEERC Southern Subregional 2012
NEERC Southern Subregional 2012 Problem B. Chess Championship 题目描述:有两个序列\(a, b\),两个序列都有\(n\)个数,并且这\( ...
- Linux下的snmpd.conf配置说明
SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进行管理.在RHEL中,SNMP的配置文件地址是/ ...
- Java编程的逻辑 (23) - 枚举的本质
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- hdu 2545 求当前结点到根节点的距离
求当前结点到根节点的距离 Sample Input 2 1 //n m 1 2 1 2 //询问 5 2 1 2 1 3 3 4 3 5 4 2 //询问 4 5 0 0 Sample Output ...
- Centos7 服务器启动jar包
首先Centos7 推荐我们这么运行项目 首先执行命令: cd /ets/systemd/system到这个目录下,新建一个 yourProjectName.service,可以把yourProjec ...
- P(查准率),R(查全率),F1 值
起源: 我们平时用的精度 accuracy,也就是整体的正确率 acc=predict_right_num/predict_num 这个虽然常用,但不能满足所有任务的需求.比如,因为香蕉太多了,也不能 ...
- python、Java、大数据和Android的薪资如何?
莫名其妙,从去年年底开始,Python这个东西在中国,突然一下子就火起来了,直至现在,他的热度更是超越了java,成为软件工程师最为关注的话题.Python之所以能火起来,很大一方面是因为大数据.人工 ...
- python-tkinter学习实例
在好友的邀请下,尝试用tkinter做一个卡牌的普通界面显示,正好练习下python的写法. 花了两天学习,写了两天代码,做了个最基本的demo.显示如下: 其中需要引入的第三方库主要有,PIL.P ...
- BZOJ4161 常系数齐次线性递推
问了数竞的毛毛搞了一番也没太明白,好在代码蛮好写先记下吧. #include<bits/stdc++.h> using namespace std; ,mod=1e9+; int n,k, ...