默认的规则

在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路由规则(二)相关推荐

  1. ASP.NET Web API 路由对象介绍

    前言 在ASP.NET.ASP.NET MVC和ASP.NET Web API这些框架中都会发现有路由的身影,它们的原理都差不多,只不过在不同的环境下作了一些微小的修改,这也是根据每个框架的特性来制定 ...

  2. Asp.net Web Api 路由 和 异常处理

    一.路由: 新建一个ASP.NET MVC4 Web Application项目之后,我们会发现在网站根目录下有个App_Start文件夹.找到下面的RouteConfig.cs文件,如下: publ ...

  3. ASP.NET Web API WebHost宿主环境中管道、路由

    ASP.NET Web API WebHost宿主环境中管道.路由 前言 上篇中说到ASP.NET Web API框架在SelfHost环境中管道.路由的一个形态,本篇就来说明一下在WebHost环境 ...

  4. ASP.NET Web API Selfhost宿主环境中管道、路由

    ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...

  5. ASP.NET Web API的Controller是如何被创建的?

    Web API调用请求的目标是定义在某个HttpController类型中的某个Action方法,所以消息处理管道最终需要激活目标HttpController对象.调用请求的URI会携带目标HttpC ...

  6. 《ASP.NET Web API 2框架揭秘》

    <ASP.NET Web API 2框架揭秘> 基本信息 作者: 蒋金楠 出版社:电子工业出版社 ISBN:9787121235368 上架时间:2014-7-5 出版日期:2014 年7 ...

  7. ASP NET Web API 2框架揭秘

    ASP.NET Web API2框架揭秘(.NET领域再现力作顶级专家精讲微软全新轻量级通信平台) 蒋金楠 著   ISBN 978-7-121-23536-8 2014年7月出版 定价:108.00 ...

  8. ASP.NET Web API 2 入门教程

    译者:jiankunking 出处:http://blog.csdn.net/jiankunking 源码下载 HTTP不仅提供web页面服务,在构建公开服务和数据api方面,它也是一个强大的平台.H ...

  9. 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session

    原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session chsakell分享了前端使用AngularJS,后端使用ASP.NE ...

最新文章

  1. SQL数据库学习之路(九)
  2. python编程小游戏-python编程游戏有哪些
  3. rest-framework:权限组件
  4. php显示html表单内容,HTML表单是什么?HTML表单内容的详细介绍(附代码)
  5. QQ音乐:React v16 新特性实践
  6. 【汇编语言】开发过程
  7. java入门代码大全,2022最新
  8. MFC教程(Visual C++ 6.0)|合集 |更新中
  9. 2021-05-20
  10. 64位电脑如何安装32位系统
  11. 中关村企业 大数据_中关村大数据企业产业规模年均增长20%以上
  12. bim webgl 模型 轻量化_WebGL轻量化BIM引擎如何加载大体量BIM模型
  13. 钙钛矿Cs2AgBiBr6|三氟乙胺碘F3EAI|4-三氟甲基苯胺溴CF3PhABr
  14. 伯努利贝叶斯分类器的应用
  15. python 播放本地音乐_python本地音乐播放器
  16. nginx排查502错误
  17. 笔记本软件页面分辨率低_笔记本分辨率降低怎么办_笔记本电脑电脑分辨率低怎么解决-win7之家...
  18. 一元导数与多元求导数总结
  19. 简易移动端爬虫实现pixabay网站图片搜索
  20. 人生苦短我用python壁纸_人生苦短,我用python

热门文章

  1. C++radix sort基数排序的实现算法之一(附完整源码)
  2. C++利用线性探查实现存储机制hash table的算法(附完整源码)
  3. STL算法中函数对象和谓词
  4. 「Python」python调用单个C++文件生成的动态库(.so)Part I
  5. 39_上下采样、MaxPool2d、AvgPool2d、ReLU案例、二维最大池化层和平均池化层、填充和步幅、多通道
  6. Mysql 8 密码策略之组件方式及ERROR 1819
  7. chromiumfx 4.5_巴中的朋友看过来,大型线上车展来了,开拓者最高综合优惠4.5万!...
  8. python对字典的基本操作(遍历、排序)总结,Python字典操作简明总结
  9. Qt学习笔记之常用控件QlistWidget
  10. 在 linux 下使用 CMake 构建应用程序