ASP.NET Web API路由规则(二)
默认的规则
在ASP.NET MVC4中
global.asax.cs代码中并无注册默认路由规则的代码
代码如下:
public class WebApiApplication : System.Web.HttpApplication{protected void Application_Start(){AreaRegistration.RegisterAllAreas();FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);}}
那么默认的路由规则是在哪里注册的呢?
我们发现
在项目中多了一个App_Start文件夹
其中RoteConfig.cs文件就是注册默认路由规则的程序所在了
代码如下:
public static void RegisterRoutes(RouteCollection routes){routes.IgnoreRoute("{resource}.axd/{*pathInfo}");routes.MapHttpRoute(name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional });routes.MapRoute(name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });}
这里有两个路由规则
一个是针对API请求的路由规则
另一个是针对普通MVC页面请求的路由规则
请求路径以字符串”api”开头的时候将访问webAPI的函数
(注:至于为什么用MapHttpRoute而不是MapRoute;为什么用routeTemplate而不是用url我们再以后的章节介绍)
因为routeTemplate中有了{controller}
所以针对api的请求可以自动映射到指定的controller类
那么是怎么找到合适的Action的呢?
系统根据请求的方式来判断
如果是以GET的方式请求的
那么将匹配controller中以“Get”开头的Action
如果是以POST的方式请求的
那么将匹配controller中以“Post”开头的Action
如果是以PUT的方式请求的
那么将匹配controller中以“Put”开头的Action
如果是以DELETE的方式请求的
那么将匹配controller中以“Delete”开头的Action
除了这几个默认的请求方式
你还可以在客户端定义你自己的请求方式!
routeTemplate最后面的id匹配Action中的参数,
这与ASP.NET MVC一致
初步的自定义
那么是不是所有的匹配GET请求的Action都必须以“Get”开头呢
不是的
我们可以用方法特性来标记一个方法属于什么什么请求
如下:
[HttpGet]public IEnumerable<Product> AllProducts(){return products;}
对应的方法特性还有
[HttpPost]
[HttpDelete]
[HttpPut]
亦可以使用如下这样的方法特性来区分
[AcceptVerbs("GET")]
[AcceptVerbs("GET", "HEAD")]
另外如果你在Controller中写了一个函数
必须是public的,必须以Get开头
而又不想让客户端以请求到此Action
那么可以使用方法特性
[NonAction]
来标记此方法
进一步自定义
我们仍然可以把action的名字放到默认的请求规则中
只要把routeTemplate改为如下即可:
routes.MapHttpRoute(name: "ActionApi",routeTemplate: "api/{controller}/{action}/{id}",defaults: new { id = RouteParameter.Optional });
ASP.NET Web API路由规则(二)相关推荐
- ASP.NET Web API 路由对象介绍
前言 在ASP.NET.ASP.NET MVC和ASP.NET Web API这些框架中都会发现有路由的身影,它们的原理都差不多,只不过在不同的环境下作了一些微小的修改,这也是根据每个框架的特性来制定 ...
- Asp.net Web Api 路由 和 异常处理
一.路由: 新建一个ASP.NET MVC4 Web Application项目之后,我们会发现在网站根目录下有个App_Start文件夹.找到下面的RouteConfig.cs文件,如下: publ ...
- ASP.NET Web API WebHost宿主环境中管道、路由
ASP.NET Web API WebHost宿主环境中管道.路由 前言 上篇中说到ASP.NET Web API框架在SelfHost环境中管道.路由的一个形态,本篇就来说明一下在WebHost环境 ...
- ASP.NET Web API Selfhost宿主环境中管道、路由
ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...
- ASP.NET Web API的Controller是如何被创建的?
Web API调用请求的目标是定义在某个HttpController类型中的某个Action方法,所以消息处理管道最终需要激活目标HttpController对象.调用请求的URI会携带目标HttpC ...
- 《ASP.NET Web API 2框架揭秘》
<ASP.NET Web API 2框架揭秘> 基本信息 作者: 蒋金楠 出版社:电子工业出版社 ISBN:9787121235368 上架时间:2014-7-5 出版日期:2014 年7 ...
- ASP NET Web API 2框架揭秘
ASP.NET Web API2框架揭秘(.NET领域再现力作顶级专家精讲微软全新轻量级通信平台) 蒋金楠 著 ISBN 978-7-121-23536-8 2014年7月出版 定价:108.00 ...
- ASP.NET Web API 2 入门教程
译者:jiankunking 出处:http://blog.csdn.net/jiankunking 源码下载 HTTP不仅提供web页面服务,在构建公开服务和数据api方面,它也是一个强大的平台.H ...
- 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session
原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session chsakell分享了前端使用AngularJS,后端使用ASP.NE ...
最新文章
- SQL数据库学习之路(九)
- python编程小游戏-python编程游戏有哪些
- rest-framework:权限组件
- php显示html表单内容,HTML表单是什么?HTML表单内容的详细介绍(附代码)
- QQ音乐:React v16 新特性实践
- 【汇编语言】开发过程
- java入门代码大全,2022最新
- MFC教程(Visual C++ 6.0)|合集 |更新中
- 2021-05-20
- 64位电脑如何安装32位系统
- 中关村企业 大数据_中关村大数据企业产业规模年均增长20%以上
- bim webgl 模型 轻量化_WebGL轻量化BIM引擎如何加载大体量BIM模型
- 钙钛矿Cs2AgBiBr6|三氟乙胺碘F3EAI|4-三氟甲基苯胺溴CF3PhABr
- 伯努利贝叶斯分类器的应用
- python 播放本地音乐_python本地音乐播放器
- nginx排查502错误
- 笔记本软件页面分辨率低_笔记本分辨率降低怎么办_笔记本电脑电脑分辨率低怎么解决-win7之家...
- 一元导数与多元求导数总结
- 简易移动端爬虫实现pixabay网站图片搜索
- 人生苦短我用python壁纸_人生苦短,我用python
热门文章
- C++radix sort基数排序的实现算法之一(附完整源码)
- C++利用线性探查实现存储机制hash table的算法(附完整源码)
- STL算法中函数对象和谓词
- 「Python」python调用单个C++文件生成的动态库(.so)Part I
- 39_上下采样、MaxPool2d、AvgPool2d、ReLU案例、二维最大池化层和平均池化层、填充和步幅、多通道
- Mysql 8 密码策略之组件方式及ERROR 1819
- chromiumfx 4.5_巴中的朋友看过来,大型线上车展来了,开拓者最高综合优惠4.5万!...
- python对字典的基本操作(遍历、排序)总结,Python字典操作简明总结
- Qt学习笔记之常用控件QlistWidget
- 在 linux 下使用 CMake 构建应用程序