博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET Web API路由规则(二)
阅读量:4708 次
发布时间:2019-06-10

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

默认的规则

在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
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 }            );

 

 

谢谢大家与我交流~~~~~

转载于:https://www.cnblogs.com/liulun/archive/2012/06/20/2556556.html

你可能感兴趣的文章
Java基础知识(JAVA之泛型)
查看>>
css3动画与2D、3D之间的转换
查看>>
[Android]仿新版QQ的tab下面拖拽标记为已读的效果
查看>>
[Android]Android MVP&依赖注入&单元测试
查看>>
循环控制
查看>>
Python学习笔记——参数axis=0,1,2...
查看>>
【原创】Talend ETL Job日志框架——基于P&G项目的一些思考和优化
查看>>
深入了解sql语句以及应用实例
查看>>
如何使用ShareSDK实现Cocos2d-x的Android/iOS分享与授权
查看>>
求欧拉函数
查看>>
2018/01/01Java基础学习——如何通过dos系统的javadoc命令生成API文档
查看>>
LaTex公式在线转图片
查看>>
hadoop学习2----HDFS操作
查看>>
单元测试小结
查看>>
python 中的split()函数和os.path.split()函数
查看>>
搜索引擎的检索模型-查询与文档的相关度计算
查看>>
实现简单的对拍
查看>>
IOS MVC与MVVM的区别
查看>>
学习python之路_入门篇A
查看>>
向数据库中全部表中增加一个字段的SQL
查看>>