澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

找不到与须求,进级体系

1.当大家创造WebApi的时候我们的档次下的Contorls文件夹下的ValuesController文件下会冒出这样多少个方法:

在.net下,创造三个HTTP服务,有广大方案,相比较老ashx,一般管理程序(HttpHandler),

       Web Service

               SOAP协议的,数据格式是XML,HTTP协议

        WCF

               基于SOAP的,数据格式是XML,能够支撑琳琅满目的商酌,像TCP,HTTP,HTTPS,Named Pipes, MSMQ.

        Web API(小说主讲)

               轻松的营造HTTP服务,.net平台上Web API 是四个开源的、理想的、营造REST-ful 服务的技能,帮助MVC的性状,像路由、调整器、action、filter、模型绑定、调整反转(IOC)或倚靠注入(DI),单元测试。那几个足以使程序更简便、更加强壮,说白了,Asp.net mvc 你会用,那么编写webapi,创设http服务,也木格外,轻量级的框架,并且对限制带宽的设备,譬如智能手提式有线话机等支撑的很好。

        本身都和谐编排测试过webservice,wcf,webapi,不过出于专门的学问中创设的服务多用于浏览器、手提式无线电话机等,也是.net平台上,所以对webapi的采纳更多。当然使用的中途,发掘蒙受的”坑“也多,当然不是说webapi不好使,首倘使投机素不相识。

 

1.    Web Api坑之“作者她妈写的action,央求咋就进不来,还提醒笔者找不到与央浼 ULANDI相称的 HTTP 财富”

[![](https://images2015.cnblogs.com/blog/614366/201707/614366-20170707115445472-1454722283.png)](http://images2015.cnblogs.com/blog/614366/201707/614366-20170707115444378-1071314955.png)

      

品尝修改controller中的action名字,开掘类post,get开端的action-public void GetData1(string data),可是古怪的难题是当继续再增多几个action-public void GetData2(string data),public void GetData2(string data);澳门新浦京娱乐场网站 1

那时候自家的情怀正是“日了狗了”明明正是四个例外action,你他妈依旧提醒作者“找到了与该央浼相配的三个操作”

抑或太年轻气盛,经验太少,查阅了连带资料,

                       “      微软的web api是在vs2013上的mvc4品类绑定发行的,它建议的web api

                       是全然依靠RESTful标准的,完全差异于从前的(同是SOAP协议的)wcf和webService,

                       它是回顾,代码可读性强的,上心灵的,倘若要拿它和web服务比较,俺会说,它的接口

                       更规范,更清楚,未有杂乱的点子名称,有的唯有二种标准的伸手,如get,post,put,delete

                       等,它们各自对应的多少个操作,下边讲一下:

                               GET:生到多少列表(暗中同意),也许获得一条实体数据

                               POST:增添服务端增加一条记下,记录实体为Form对象

                               PUT:增多或涂改服务端的一条记下,记录实体的Form对象,记录主键以GET方式开始展览传输

                               DELETE:删除 服务端的一条记下

                      注意下面公开的API接口都是在XMLHttpRequest情状下调用的,当然你能够使用jquery的ajax组件

                      来成功这一个央求调用,它的代码特别面向对象.”

哦,原来是那样,认知webapi是认知get,post,put,delete,(那是小编猜的,测试下),再加贰个action,test

澳门新浦京娱乐场网站 2

再请求,澳门新浦京娱乐场网站 3 ,

找到了与该必要相配的四个操作: 
类型 Service.Controllers.EnterOrExitController 的 test
类型 Service.Controllers.EnterOrExitController 的 GetData
类型 Service.Controllers.EnterOrExitController 的 UploadData

类似是猜错了,他类似才不管你action的名字,你发起httpget央求,他就把action里面包车型大巴get全搞出来相称,http-get-3个扔给你,哦,OMG,“大家找到了与该恳求相称的三个操作,你要哪叁个?”,

 既然如此是这么,作者须要在叁个api调整器中写三个action用以哀告访问咋办吧,怎样才具路由到钦定的action,去完毕http诉求。

答案,正是改路由的安插文件,澳门新浦京娱乐场网站 4

    在.net下,创造三个HTTP服务,有繁多方案,比较老ashx,一般管理程序(HttpHandler),

       Web Service

               SOAP协议的,数据格式是XML,HTTP协议

        WCF

               基于SOAP的,数据格式是XML,能够支撑多姿多彩的商业事务,像TCP,HTTP,HTTPS,Named Pipes, MSMQ.

        Web API(文章主讲)

               轻易的创设HTTP服务,.net平台上Web API 是四个开源的、理想的、塑造REST-ful 服务的手艺,援助MVC的性状,像路由、调节器、action、filter、模型绑定、调整反转(IOC)或倚靠注入(DI),单元测试。那些足以使程序更简约、更加强健,说白了,Asp.net mvc 你会用,那么编写webapi,构建http服务,也木不平时,轻量级的框架,并且对限制带宽的器具,举个例子智能机等扶助的很好。

        本人都自身编排测试过webservice,wcf,webapi,但是由于工作中营造的服务多用来浏览器、手提式有线电话机等,也是.net平台上,所以对webapi的行使越多。当然使用的旅途,发现遭逢的”坑“也多,当然不是说webapi不佳使,首要是和煦不熟知。

 

1.    Web Api坑之“笔者他妈写的action,要求咋就进不来,还提示小编找不到与央求 ULX570I匹配的 HTTP 能源”

[![](https://images2015.cnblogs.com/blog/614366/201707/614366-20170707115445472-1454722283.png)](http://images2015.cnblogs.com/blog/614366/201707/614366-20170707115444378-1071314955.png)

      

品尝修改controller中的action名字,开采类post,get初步的action-public void GetData1(string data),不过离奇的难点是当继续再增多多少个action-public void GetData2(string data),public void GetData2(string data);澳门新浦京娱乐场网站 5

那儿自身的激情便是“日了狗了”明明正是四个例外action,你他妈如故提醒作者“找到了与该需要相称的多少个操作”

要么太年轻,经验太少,查阅了有关资料,

                       “      微软的web api是在vs二零一二上的mvc4项目绑定发行的,它提议的web api

                       是一点一滴依赖RESTful规范的,完全不一致于此前的(同是SOAP协议的)wcf和webService,

                       它是简单,代码可读性强的,上心灵的,假使要拿它和web服务比较,笔者会说,它的接口

                       更标准,更清楚,未有杂乱的措施名称,有的只有三种规范的央浼,如get,post,put,delete

                       等,它们分别对应的多少个操作,下边讲一下:

                               GET:生到多少列表(暗许),或然获得一条实体数据

                               POST:增添服务端增添一条记下,记录实体为Form对象

                               PUT:增加或涂改服务端的一条记下,记录实体的Form对象,记录主键以GET格局开始展览传输

                               DELETE:删除 服务端的一条记下

                      注意下边公开的API接口都以在XMLHttpRequest情形下调用的,当然你能够利用jquery的ajax组件

                      来成功这一个伏乞调用,它的代码尤其面向对象.”

哦,原来是那样,认知webapi是认知get,post,put,delete,(这是小编猜的,测试下),再加三个action,test

澳门新浦京娱乐场网站 6

再请求,澳门新浦京娱乐场网站 7

找到了与该伏乞相配的四个操作:
类型 Service.Controllers.EnterOrExitController 的 test
类型 Service.Controllers.EnterOrExitController 的 GetData
类型 Service.Controllers.EnterOrExitController 的 UploadData

看似是猜错了,他看似才不管你action的名字,你发起httpget诉求,他就把action里面包车型地铁get全搞出来相称,http-get-3个扔给你,哦,OMG,“我们找到了与该央浼相配的多个操作,你要哪八个?”,

找不到与须求,进级体系。 既然如此是那样,小编急需在一个api调整器中写多个action用以央浼访问咋做呢,怎么样技巧路由到钦定的action,去做到http诉求。

答案,便是改路由的布置文件,澳门新浦京娱乐场网站 8

1.地点已经教我们如何修改全局路由了,那么修改完后大家在post央求的要这么使用,个中model模型小编就私下认可你应有已经济建设好了,未有创制的话请看上一部分

找不到与须求,进级体系。原文:

澳门新浦京娱乐场网站 9澳门新浦京娱乐场网站 10

 

 

Post方法的参数,若是提交的诉求体需借使phoneNum=123&password=123如此的格式。假诺用string AddNew(string phoneNum, string password)这种平凡参数会有好多的坑(参考《C#进级类别—— WebApi 接口参数不再质疑:传参详解》),所以并非用。都用模子对象,public string AddNew2(LoginModel model),也足以参数注解[FromBody]:public string AddNew2([FromBody]LoginModel model)。(只好有二个参数标明FromBody)。

序言:从MVC到WebApi,路由体制一向是伴随着那几个技能的二个要害组成都部队分。

// GET http://程序ip:程序端口/api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET http://程序ip:程序端口/api/values/5
        public string Get(int id)
        {
            return "value";
        }

        // POST http://程序ip:程序端口/api/values
        public void Post([FromBody]string value)
        {
        }

        // PUT http://程序ip:程序端口/api/values/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE http://程序ip:程序端口/api/values/5
        public void Delete(int id)
        {
        }

   恐怕您也发觉了,那份配置文件中:

routeTemplate: "api/{controller}/{id}",

   他娘的根本未曾分明action,所以怎样都同盟不到吧,人家是比照REST风格暗许去找get,post,要想向asp.net mvc web中那样央求,你只好修改为routeTemplate: "api/{controller}/{action}/{id}",

另外

澳门新浦京娱乐场网站 11

 

   只怕您也发掘了,那份配置文件中:

routeTemplate: "api/{controller}/{id}",

   他娘的从来未有规定action,所以怎么都万分不到呢,人家是根据REST风格暗许去找get,post,要想向asp.net mvc web中那样伏乞,你不得不修改为routeTemplate: "api/{controller}/{action}/{id}",

澳门新浦京娱乐场网站 12澳门新浦京娱乐场网站 13

它能够很简短:如若你仅仅只要求会用一些简约的路由,如/Home/Index,那么您只须求配备一个默许路由就能够轻巧化解;

View Code

[HttpPost]
        public bool Login4(LoginModel model)//也可以参数标注[FromBody]LoginModel model
        {
            if (model.phoneNum == "123" && model.password == "123")
            {
                return true;
            }
            else
            {
                return false;
            }
        }

它能够很暧昧:你的url可以变化莫测,看到有的相近“无厘头”的url,感到很难领悟它什么找到相配的action,举例/api/user/1/detail,那样四个url能够令你纠结半天。

行使Postman工具及谷歌(Google)浏览器乞求后分别收获到如下结果:(前期将联合行使Postman自身到英特网下载或到这里本人提供的安装包网址下载)

View Code

它可以很隐晦:当面试官提问“请轻易分析下MVC路由体制的原理”,你或然事先就妄图好了答案,然后噼里啪啦一顿(型如:UrlRoutingModule→Routes→RouteData→RequestContext→Controller),你只怕回答很流畅,但并不一定能知晓那几个个指标到底是啥意思。两年前的面试,博主也这样做过。

澳门新浦京娱乐场网站 14

澳门新浦京娱乐场网站 15

博主认为,究竟路由机制在您的纪念中居于哪一面,完全在于你的求知欲。路由机制积厚流光,博主并未有完全明了,但博主是一个好奇心重的人,总感到隐秘的事物就得探寻个终归。明天,博主依照自身的知晓,分享下WebApi里面路由的规律以及使用,如有思索不周,接待园友们指正。

是或不是开掘webapi央浼语法并不是那么的好用,为了让其更切合我们的使用习于旧贯,那么大家开头准备路由吧!

2.由此自定义路由规则来捕获参数

WebApi连串文章

2.修改路由规则,使得应用更切合大家日常使用MVC的设计程序的习于旧贯:

WebAPI可以通过[Route]和[RoutePrefix]起点定义路由,[RoutePrefix]作用于Controller,[Route]功效于Action,一旦多个Controller也许Action设置了[Route]、[RoutePrefix]那么设置的routeTemplate讲在 那一个Controller可能Action中就不起成效了。

  • C#进级种类——WebApi接口测试工具:WebApiTestClient
  • C#晋级种类——WebApi 跨域难点化解方案:CO福睿斯S
  • C#进级体系——WebApi身份认证化解方案:Basic基础认证
  • C#进级连串——WebApi接口传参不再狐疑:传参详解
  • C#进级连串——WebApi接口重回值不思疑:重回值类型详解
  • C#晋级体系——WebApi十分管理化解方案
  • C#升级体系——WebApi 路由体制剖判:你筹算好了吗?
  • C#升级种类——WebApi区域Area使用小结

(1) 将routeTemplate: "api/{controller}/{id}",修改为routeTemplate: "api/{controller}/{action}/{id}",

(1)[Route]自定义路由

一、MVC和WebApi路由体制比较

 澳门新浦京娱乐场网站 16澳门新浦京娱乐场网站 17

澳门新浦京娱乐场网站 18澳门新浦京娱乐场网站 19

1、MVC里面包车型地铁路由

在MVC里面,暗许路由体制是透过url路线去相称对应的action方法,举个例子/Home/GetUser那个url,就意味着相配Home这几个Controller上边包车型地铁GetUser方法,那么些很好通晓,因为在MVC里面定义了三个默许路由,在App_Start文件夹上面有三个RouteConfig.cs文件

澳门新浦京娱乐场网站 20

澳门新浦京娱乐场网站 21

    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Department", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

澳门新浦京娱乐场网站 22

url: "{controller}/{action}/{id}"那个概念了大家url的规则,{controller}/{action}定义了路由的必须参数,{id}是可选参数

(2) 之后你就发掘大家也须要传方法名称才方可到钦赐的措施了,你是还是不是一度会融洽安插路由了

[Route("Login/{phoneNum}/{password}")]
        [HttpGet]
        public string Login5(string phoneNum, string password)
        {
            return string.Format("Login5-->phoneNum:{0},password:{1}", phoneNum, password);
        }

2、WebApi里面包车型地铁路由

和MVC里面的路由有一点点不相同,WebApi的暗中同意路由是通过http的主意(get/post/put/delete)去相称对应的action,也便是说webapi的暗中同意路由并不要求钦定action的名号。照旧来看望它的默许路由布署,我们新建四个Webapi项目,在App_Start文件夹上面自动生成三个WebApiConfig.cs文件:

澳门新浦京娱乐场网站 23

澳门新浦京娱乐场网站 24

    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API 路由
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }

澳门新浦京娱乐场网站 25

 和MVC类似,routeTemplate: "api/{controller}/{id}"那些定义了路由的模板,api/{controller}是必选参数,{id}是可选参数,那么难题就来了,如若我们的url不带有action的称谓,那么怎么样找到央求的方法吗?大家先来简单看二个例子:

澳门新浦京娱乐场网站 26

    public class OrderController : ApiController
    {
        [HttpGet]
        public object GetAll()
        {
            return "Success";
        }
    }

澳门新浦京娱乐场网站 27

大家透过url来拜访

澳门新浦京娱乐场网站 28

表明哀求可以成功。

为啥这么些央求能够成功吧?那是因为,当我们走访

本来,WebApi也支撑MVC里面包车型客车路由机制,但RestFul风格的劳务供给央求的url里面不可能包蕴action,所以,在WebApi里面是并不提倡使用MVC路由体制的。

那是二个最简便的例子,上面大家就来详细看看WebApi里面的路由原理以及选拔。 

澳门新浦京娱乐场网站 29

View Code

二、WebApi路由基础

 3.上边已经教大家如何修改全局路由了,那么修改完后我们在get须要的要这么使用,个中model模型本人制造哦

澳门新浦京娱乐场网站 30

1、私下认可路由

地点大家关系了,新建叁个WebApi服务的时候,会活动在WebApiConfig.cs文件之中生成多少个暗中认可路由:

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

将MapHttpRoute()方法转到定义可以,它有多少个重载方法:

澳门新浦京娱乐场网站 31

独家来看看各样参数的效劳:

  • name:"DefaultApi"→表示此路由的称号,这里只必要确认保证路由名称不重复就OK了。
  • routeTemplate: "api/{controller}/{id}"→表示路由的url规则,“api”是定点部分,主要用来标志当前呼吁的url是三个api服务的接口,分裂MVC的路由,当然,这里并不是自然要写成“api”,假使您改成“apiserver”,那么您央浼的url里面也供给写成“apiserver”;“{controller}”是调节器的占位符部分,在量体裁衣的url里面,该片段对应的是具体的调整器的名号,那一个和MVC里面一致;“{id}”是参数的占位符部分,表示参数,一般那些参数都会在default里面安装可选。有了那个路由模板约束诉求的url,举个例子:我们央浼的url写成
  • defaults: new { id = RouteParameter.Optional }→表示路由的暗中认可值,比方上面的routeTemplate,{controller}和{id}部分都足以安装暗许值,比方:defaults改成new { controller="Order", id = RouteParameter.Optional },那么大家恳请
  • constraints→表示路由约束,一般是一个封锁路由模板的正则表达式。比如:我们进入约束标准 constraints: new { id = @"d " } ,这就约束必供给合作一到多个参数id,那么,大家在OrderController里面加入另三个艺术

澳门新浦京娱乐场网站 32

    public class OrderController : ApiController
    {

        [HttpGet]
        public object GetAll()
        {
            return "Success";
        }

        [HttpGet]
        public object GetById(int id)
        {
            return "Success"   id ;
        }
    }

澳门新浦京娱乐场网站 33

我们通过

澳门新浦京娱乐场网站 34

我们再通过

澳门新浦京娱乐场网站 35

本条是很好掌握的,id的值不相称正则表明式。

而大家走访

澳门新浦京娱乐场网站 36

居然连GetAll()方法都找不到了。那是干吗呢?原本正是其一约束在添乱,正则d 代表分外三个或多少个数字,所以假使诉求的url里面未有传数字,则自动相配不到。所以,倘若急需相称无参的不二诀窍,大家把约束改成那样: constraints: new { id = @"d*" } ,这一个象征相配0个或多少个数字,再来试试

澳门新浦京娱乐场网站 37

这样就OK了。

上述说了那么多都以约束id的,其实您也能够选拔表明式去束缚controller、action等等,但貌似有的时候用,我们就不做过多疏解。

(1) 方法

(2)各类方法都[Route]自定义太辛勤,[RoutePrefix]功能于Controller适用内部有着办法

2、自定义路由

上边介绍了这么多,都以有关暗中认可路由原理的介绍。除了暗中认可路由,我们也能够自定义路由,大家将WebApiConfig.cs里面改成这么:

澳门新浦京娱乐场网站 38

    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API 路由
            config.MapHttpAttributeRoutes();

            //1.默认路由
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            //2.自定义路由一:匹配到action
            config.Routes.MapHttpRoute(
                name: "ActionApi",
                routeTemplate: "actionapi/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            //3.自定义路由二
            config.Routes.MapHttpRoute(
                name: "TestApi",
                routeTemplate: "testapi/{controller}/{ordertype}/{id}",
                defaults: new { ordertype="aa", id = RouteParameter.Optional }
            );
        }
    }

澳门新浦京娱乐场网站 39

除了暗中认可路由,大家再进入此外多少个自定义路由规则

澳门新浦京娱乐场网站 40澳门新浦京娱乐场网站 41

澳门新浦京娱乐场网站 42澳门新浦京娱乐场网站 43

2.1、自定义路由一:相称到action

率先个自定义路由很好精通,和MVC里面包车型客车路由机制保持一致,只但是为了区别暗中同意路由,大家将路由模板的前缀改成了“actionapi”。大家通过这些自定义的路由也能找到相配的主意。

澳门新浦京娱乐场网站,例如说大家访问

澳门新浦京娱乐场网站 44

通过action的称呼来合营很好精通,上边的GetAll()是措施名,webApi会暗中同意它便是action的名称,假诺你想要方法名和action的名目差异,你也得以自定义action的名号,这些能够通过特征ActionName来兑现,如下:

        [ActionName("TestActionName")]
        [HttpGet]
        public object GetById(int id)
        {
            return "Success"   id ;
        }

测试结果:

澳门新浦京娱乐场网站 45

事先博主角示参数和再次来到值的时候都是应用的协作到action的路由。这种用法和MVC里面保持一致,比较好通晓,不过WebApi里面并不提倡。

//1、 Get 方法的参数。http://程序ip:程序端口/api/values/Login?phoneNum=123&password=123
        [HttpGet]
        public string Login(string phoneNum, string password)
        {
            return string.Format("phoneNum:{0},password:{1}", phoneNum, password);
        }
        //这样写就行
        //如果用模型对象,则必须标注[FromUri],http://程序ip:程序端口/api/values/Login?phoneNum=123&password=123
        [HttpGet]
        public bool Login2([FromUri]LoginModel model)
        {
            if (model.phoneNum =="123" && model.password == "123")
            {
                return true;
            }
            else
            {
                return false;
            }
        }
//当然每个Action都设定api/Login很麻烦,可以在Controller上标注[RoutePrefix("api/Login")](路径不能以/结尾)
    [RoutePrefix("api/Login")]
    public class LoginController : ApiController
    {
        [HttpGet]
        public string LoginAction(string phoneNum, string password)
        {
            return string.Format("Login-->phoneNum:{0},password:{1}", phoneNum, password);
        }
    }

2.2、自定义路由二

其次个自定义路由第一马上刻去是不太好通晓的,没涉及,大家先来根据它的路由模板规则使用试试。

澳门新浦京娱乐场网站 46

通过

澳门新浦京娱乐场网站 47

通过

澳门新浦京娱乐场网站 48

通过

怎么看头啊?相当于说,只要{ordertype}依照路由规则去安插,都能找到相应的秘技。这里的{ordertype}有啥样用吗?这些要留在下边介绍特色路由的时候来分解。

View Code

View Code

3、路由原理

有了下边包车型客车那个理论作为基础,大家再来剖析下WebApi里面路由体制的规律以及路由万分的长河。由于WebApi的路由机制和MVC有诸多的相似性,所以要想知道Webapi的路由机制,有需求搬出来这贰个asp.net Rounting里面包车型客车对象。那个进程有一些复杂,博主就依据本人的理解,提提一些重大的长河:

1、WebApi服务运维之后,会进行全局配置文件Global.asax.cs的 protected void Application_Start(){GlobalConfiguration.Configure(WebApiConfig.Register);} 方法,通过参数委托推行WebApiConfig.cs里面包车型客车 public static voidRegister(HttpConfiguration config) 那一个艺术,将兼具配置的路由消息增添到 HttpRouteCollection 对象中(MVC里面或然是RoutCollection对象)保存起来。这里的HttpRoutCollection对象的实例名是Routes,那一个很要紧,后边要用到

2、当大家发送诉求到WebApi服务器的时候,比方大家访问

3、将IHttpRoute对象交给当前的要求的上下文对象RequestContext管理,依据IHttpRoute对象里面的url相配到相应的controller,然后再依靠http要求的品种和参数找到相应的action。那样三个呼吁就能够找到呼应的章程了。 

这几个历程本身是特别复杂的,为了简化,博主只采取了最关键的多少个进程。更详尽的路由机制得以仿效:。这小说写得有一点深,有意思味的能够看看。

(2)model对象

 澳门新浦京娱乐场网站 49

三、WebApi路由进度

因而上文路由的历程,大家领略,二个伸手过来以往,路由重点须求阅历三个等级

  1. 听别人讲乞请的url相称路由模板
  2. 找到调节器
  3. 找到action

澳门新浦京娱乐场网站 50澳门新浦京娱乐场网站 51

 

1、依据供给的url相称路由模板

那一点上边已经说了许多了,主要便是路由模板的布局和url的十三分。在此不作过多表达。

public class LoginModel
    {
        public string userName { get; set; }
        public string phoneNum { get; set; }
        public string password { get; set; }
    }

总结:

2、找到调整器

一经您反编写翻译路由模块的代码,你会意识调整器的取舍关键在IHttpControllerSelector这一个接口的SelectController()方法里面管理。

澳门新浦京娱乐场网站 52

该措施将眼下的乞请以HttpRequestMessage对象作为参数字传送入,重返HttpControllerDescriptor对象。这么些接口暗中认可由DefaultHttpControllerSelector那些类提供实现

澳门新浦京娱乐场网站 53

暗许实现的艺术里面大致的算法机制是:首先在路由字典中找到实际的调整器的称号(比方“Order”),然后在此调整器名称下面加上字符串“Controller”的到央求调节器的全称(比方“OrderController”),最终找到呼应的WebApi的Controller,实例化就获得当前恳请的调节器对象。

View Code

1.只要选拔 Post 诉求,那么就必要各种方法都声称叁个参数对应的类,参数前可评释[FromBody]。

3、找到action

获取了调节器对象之后,Api引擎通过调用IHttpActionSelector那个接口的SelectAction()方法去相配action。那么些进程首要包括:

  • 深入分析当前的http央浼,获得央求类型(是get、post、put依旧delete)
  • 只要路由模板配置了{action},则直接取到url里面包车型大巴action名称
  • 深入分析呼吁的参数

若是路由模板配置了{action},那么找到相应的action就很容易,假如未有配置action,则会首先相配央求类型(get/post/put/delete等),然后相称必要参数,找到呼应的action。大家看个例子,比方,大家的controller加正如一些办法。

澳门新浦京娱乐场网站 54

    public class OrderController : ApiController
    {
        [HttpGet]
        public IHttpActionResult GetAll()
        {
            return Ok<string>("Success");
        }

        [HttpGet]
        public IHttpActionResult GetById(int id)
        {
            return Ok<string>("Success"   id );
        }

        [HttpPost]
        public HttpResponseMessage PostData(int id)
        {
            return Request.CreateResponse();
        }

        [HttpPost]
        public HttpResponseMessage SavaData(ORDER order)
        {
            return Request.CreateResponse();
        }

        [HttpPut]
        public IHttpActionResult Put(int id)
        {
            return Ok();
        }

        [HttpDelete]
        public IHttpActionResult DeleteById(int id)
        {
            return Ok();
        }
    }

澳门新浦京娱乐场网站 55

 匹配action的结果

url http方法 参数 结果
http://localhost:21528/api/Order get none 匹配GetAll方法
http://localhost:21528/api/Order get id 匹配GetById方法
http://localhost:21528/api/Order post order 匹配SavaData方法
http://localhost:21528/api/Order put id 匹配Put方法 
http://localhost:21528/api/Order delete id 匹配DeleteById方法 

 WebApi还提供了贰个action同不经常间协助八个http方法的伸手,使用AcceptVerbs天性去标志。但博主认为实在应用并十分少,有意思味的能够精晓下。

        [AcceptVerbs("GET", "POST")]
        public IHttpActionResult GetById(int id)
        {
            return Ok<string>("Success"   id );
        }

是否和MVC中的使用基本均等了吗?

2.只要选用 Get 诉求,那么参数相比随便,不过供给注意防卫缓存(使用 ajax 的话加上一个脚下岁月照旧 随机数的参数,使用 HttpClient 等须求禁用缓存)。

四、WebApi天性路由

地点说了那般多都以路由的部分大局配置。并且存在问题:

若是http乞求的主意一致(比方都是post央浼),并且呼吁的参数也同等。今年就好像就有一点不太好办了,这种景色在实际项目中如故相比多的。譬喻

澳门新浦京娱乐场网站 56

  public class OrderController : ApiController
    {
        //订单排产
        [HttpPost]
        public void OrderProduct([FromBody]string strPostData)
        {

        }

        //订单取消
        [HttpPost]
        public void OrderCancel([FromBody]string strPostData)
        {

        }

        //订单删除
        [HttpPost]
        public void OrderDelete([FromBody]string strPostData)
        {

        }
    }

澳门新浦京娱乐场网站 57

其有时候假如应用大家地点讲的Restful风格的路由是解决不了那几个难题的。当然,有园友可能就说了,既然那样,大家在路由模板里面增加“{action}”不就化解了么!那样真的可行。但要么那句话,不提倡。大家来探视怎么样使用性子路由化解这么些标题。

专注:若是参数用模子对象,则必须标记[FromUri]要不你会获得不到值吗!

3.一旦用 Get 格局,参数既能用一般参数也得以用模子类参数,需求注意防卫缓存;如 果 用 Post 方 式 , 参 数 一 定 要 用 模 型 类 , 客 户 端 既 可 以 用 ContentType=” application/x-www-form-urlencoded”提交表单,也足以用 ContentType=”application/json”提交。

1、运营特性路由

倘使要选取个性路由,首先在WebApiConfig.cs的Register方法里面必须先启用性格路由:

澳门新浦京娱乐场网站 58

        public static void Register(HttpConfiguration config)
        {
            // 启用Web API特性路由
            config.MapHttpAttributeRoutes();

            //1.默认路由
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }

澳门新浦京娱乐场网站 59

貌似情形下,当大家新建一个WebApi项目的时候,会活动在Register方法里面加多那句话。

缘由分析:还记得有面试题问过get和post央求的不同吧?个中有七个区分正是get必要的数额会附在UPAJEROL之后(正是把多少放置在HTTP协议头中),而post诉求则是放在http协议包的包体中。**

4.路由安装的话根据项目景况设置,适合的才是好的,切记不要搞得太乱。

2、最简易的性状路由

我们在OrderController那么些调整器里面加那么些action

        [Route("Order/SaveData")]
        [HttpPost]
        public HttpResponseMessage SavaData(ORDER order)
        {
            return Request.CreateResponse();
        }

下一场大家经过Web里面包车型客车Ajax调用

澳门新浦京娱乐场网站 60

$(function () {
    $.ajax({
        type: 'post',
        url: 'http://localhost:21528/Order/SaveData',
        data: { ID: 2, NO:"aaa"},
        success: function (data, status) {
            alert(data);
        }
    });
});

澳门新浦京娱乐场网站 61

收获结果:

澳门新浦京娱乐场网站 62

本来,有人或者就有疑义了,那天性格路由的作用和“{action}”的职能同样嘛,其实否则,如若这里改成 [Route("Test/AttrRoute")] ,然后央浼的url换到

澳门新浦京娱乐场网站 63

性格路由的指标是为了缓和大家公共路由模板引擎解决不了的主题材料。四个action定义了特征路由之后,就能够经过特色路由上边的路由规则找到。

 

 

3、带参数的特色路由

特色路由的平整能够接纳“{}”占位符动态传递参数,比方大家有那样四个特色路由

        [Route("ordertype/{id}/order")]
        [HttpGet]
        public IHttpActionResult GetById(int id)
        {
            return Ok<string>("Success"   id );
        }

在浏览器里面调用

 澳门新浦京娱乐场网站 64

调用成功。到此,大家就能够看懂本文最初叶极度看似“奇怪”的路由→/api/user/1/detail那一个了。

4、参数的约束和私下认可值

        [Route("api/order/{id:int=3}/ordertype")]
        [HttpGet]
        public IHttpActionResult GetById(int id)
        {
            return Ok<string>("Success"   id );
        }

那边约束可变部分{id}的取值必须是int类型。并且私下认可值是3.

看看效果

澳门新浦京娱乐场网站 65

澳门新浦京娱乐场网站 66

不满足约束原则,则一向回到404。

5、路由前缀

在正式项目中,同叁个调整器的持有的action的有所天性路由标记二个一样的前缀,这种做法并非必须,但这么能够增添url的可读性。一般的做法是在调控器上边运用特性[RoutePrefix]来标识。

澳门新浦京娱乐场网站 67

[RoutePrefix("api/order")]
    public class OrderController : ApiController
    {
        [Route("")]
        [HttpGet]
        public IHttpActionResult GetAll()
        {
            return Ok<string>("Success");
        }

        [Route("{id:int}")]
        [HttpGet]
        public IHttpActionResult GetById(int id)
        {
            return Ok<string>("Success"   id );
        }

        [Route("postdata")]
        [HttpPost]
        public HttpResponseMessage PostData(int id)
        {
            return Request.CreateResponse();
        }
    }

澳门新浦京娱乐场网站 68

那么那个那一个调整器的action的时候,都亟待/api/order开始,前面接上action个性路由的平整。

五、第一个Restful风格的WebApi服务

 通过以上,大家就足以协会贰个Restful风格的WebApi服务。

澳门新浦京娱乐场网站 69

  [RoutePrefix("api/AttrOrder")]
    public class OrderController : ApiController
    {
        [Route("")]
        [HttpGet]
        public IHttpActionResult GetAll()
        {
            return Ok<string>("Success");
        }

        [Route("{id:int=3}/OrderDetailById")]
        [HttpGet]
        public IHttpActionResult GetById(int id)
        {
            return Ok<string>("Success"   id );
        }

        [Route("{no}/OrderDetailByNo")]
        [HttpGet]
        public IHttpActionResult GetByNO(string no)
        {
            return Ok<string>("Success"   no);
        }

        [Route("{name}/OrderDetailByName")]
        [HttpGet]
        public IHttpActionResult GetByName(string name)
        {
            return Ok<string>("Success"   name);
        }

        [Route("postdata")]
        [HttpPost]
        public HttpResponseMessage PostData(int id)
        {
            return Request.CreateResponse();
        }

        [Route("Test/AttrRoute")]
        [HttpPost]
        public HttpResponseMessage SavaData(ORDER order)
        {
            return Request.CreateResponse();
        }
    }

澳门新浦京娱乐场网站 70

赢得结果

澳门新浦京娱乐场网站 71

六、总结

 整了这么久终于整完了。如若你以为本文对你有帮助,请补助博主推荐,您的支撑是博主最大的重力!

 

分类: C#

标签: WebApi

已引进 关切自身 收藏该文 澳门新浦京娱乐场网站 72 澳门新浦京娱乐场网站 73

澳门新浦京娱乐场网站 74

无意安分
关注 - 30
粉丝 - 710

 

 

加关注

体贴入微一下楼主吧

69

1

 

您曾经引进过

 

« 上一篇:C#晋级体系——WebApi 接口再次回到值不思疑:重返值类型详解

本文由澳门新浦京娱乐场网站发布于www.146.net,转载请注明出处:找不到与须求,进级体系