C#进阶系列--WebApi

所需积分/C币:50 2018-08-23 18:36:37 3.21MB PDF
65
收藏 收藏
举报

目录 C#进阶系列——WebApi 路由机制剖析:你准备好了吗? ................................................................................................... 3 一、MVC和WebApi路由机制比较 ........................................................................................................................................ 5 1、MVC里面的路由 ......................................................................................................................................................... 5 2、WebApi里面的路由 ................................................................................................................................................... 5 二、WebApi路由基础 ............................................................................................................................................................. 7 1、默认路由 ..................................................................................................................................................................... 7 2、自定义路由 ............................................................................................................................................................... 10 2.1、自定义路由一:匹配到action ................................................................................................................. 11 2.2、自定义路由二 ............................................................................................................................................... 12 3、路由原理 ................................................................................................................................................................... 12 三、WebApi路由过程 ........................................................................................................................................................... 13 1、根据请求的url匹配路由模板 .............................................................................................................................. 13 2、找到控制器 ............................................................
3、解决特殊不想使用验证的方法…….….… 94 五、总结 ..:.:::::·:::.·.·.::::...:::::.·.::::···:· 95 C#进阶系列— HwebApi跨域问题解决方案:COR5 、跨域问题的由来 跨域问题解决原理.… 、跨域问题解决绀节…….… 1、场景描述…… 、场景测试 1)我们不做任何的处理,直接将两个项目运行起来。看效果如何∴… 2)使用CORs跨域…… 99 3)CORS的具体参数设置。 .103 四、总结.………… 1着·着着1·面音 :::·::::·..·::::·:::::· 104 C#进阶系列 -webApi接口测试T具: WebApiTestclient 105 、 WebApiTestclient介绍 bApiTestc1ient展示 、 WebApiTestcllent使用 116 1、如何引入组件… 116 2、如何使用组件 1、修改Api. astm1文件 2、配買读取注释的xm1路径 3、测试接口 .121 川、总结 123 c#进阶系列_ webapi路由机制剖析:你准备好了 吗? 阅读目录 ·二、MVC和 WebApi路山机制比较 1、MC里面的路由 o2、 WebApi隼面的路由 、 bapi路由基础 o1、默认路由 2、自定义路由 o3、路由原理 三、 WebApi跸由过程 σ1、根据请求的ur匹配路由模板 o2、找到控制器 o3、找到 action 四、 WebApi特性路由 o1、启动特性路由 o2、最简单的特性路由 o3、带参数的特性路由 o4、参数的约束和默认值 o5、路由前缀 ·五、第一个 Restful1风格的 WebApi服务 总结 正文 前言:从MVC到 WebApi,路出机制一直是伴随着这些技术的一个重要组成部分。 它可以很简单:如果你仅仅只需要会用一些简单的路由,如/Home/ Index,那么你只需要配置一个默 认路由就能简单搞定; 它可以很神秘:你的u1可以千变万化,看到一些看似「无厘头”的u1,感觉很难理解它如何找到 匹配的 action,例如/api/user/1/ detai1,这样一个ur1可以让你纠结半天。 它可以很晦涩:当面试官提问φ请简单分析下MC路由机制的原理”,你可能事先就准备好了答案, 然后噼里啪啦一顿(型如: Ur1 RoutingModule→ Routes→ RouteData→ Requestcontext→ Contro1ler),你可能回答很流 利,但并不一定能理解这些个对象到底是啥意思。两年前的面试,博主也这样做过。 博主觉得,究竞路由杋制在你的印象中处于哪一面,完全取决于你的求知欲。路由机制博大精深,博 主并未完全理解,但博主是一个好奇心重的人,总觉得神秘的东西就得探索个究竞。今天,博主根据 自己的理解,分享卜 WebApi里面路由的原理以及使用,如有考虑不周,欢迎园友们指l WebApi系列文章 ·c#进阶系列- bapi接口测试工具: WebApiTestc1ient c#进阶系列— webapi跨域间题解决方案:CORS ·C#进阶系列_硎 baPi身份认证解决方案: Basic基础认证 c#进阶系刎_ WebApi接口传参不再因惑:传参详解 C#进阶系列_ WebApi接口返回值不惑:返回值类型详解 〔#进阶系列— webapi异常处理解决方案 c#进阶系列— baPi路由杋制剖析:你准备好∫吗? ·C#进阶系列- WebApi区域Area使用小结 回到顶部 MVC和 bapi路由机制比较 回到顶部 1、NVC里面的路由 在MVC里面,默认路由机制是通过ur1路径去匹配对应的 action方法,比如/Home/ Getuser这个 ur1,就表示匹配Home这个 Controller下面的 Getuser方法,这个很好理解,因为在MC里面定 义了一个默认路由,在 App start文件夹下面有一个 RouteConfig.C5文件 1次口 雷]Web Properties D·■引用 App Dat App Start b C* Route Contig.cs Content b Controllers Script public class RouteConfig public static void RegisterRoutes( routeCollection routes) routes. IgnoreRoute ( "resource]. axd/I*pathInfo"); routes. MapRoute( name:Default url:controller/taction/fid] defaults: newi controller ="Department action ="Index", id UrlParameter. Optional y ) J1:"{ controller}/{ action}/{id}"这个定义了我们u1的规则,{ contro1e}/{ action}定 义了路由的必须参数,{id}是可选参数 回到顶部 2、 WebApi里面的路由 和MVC里面的路由有点不同WebApi的默认路由是通过http的方法(get/post/put/delete)去 匹配对应的 action,也就是说 Webapi的默认路由并不需要指定 action的名称。还是来看看它的 默认路由配置,我们新建一个 Webapi项目,在App_ Start文件夹下面自动生成一个 ebApiconfig,CS文件: 事] WebApiTest Properties ·■引用 App Data A b园 WebApiConfig. cs Controllers s C* OrderControllercs Models Globalasax packages, contig b Y- Web. config public static class WebApiConfig publicstaticvoidRegister(httpconfigurationconfig // Web apt路由 configMaphttpattrIbuterouteso) configRoutesMaphttproute( name:"DefaultApi", routeTemplate: api/controller]/id] defaults: new i id= RouteParameter Optional y ) 和MVC类似, routeTemplate:"api/{ contro1ler}/{id}"这个定义了路由的模板, api/{ contro1ler}是必选参数,[id}是可选参数,那么问题就来了,如果我们的ur1不包含 action 的名称,那么如何找到请求的方法呢?我们先来简单看一个例子: public class OrderController ApiController [htTpget] public object GetAllo return Success" j 我们通过ur1来访问 e>C localhost: 21528/api/Order 用博客园-开发者的百度一下,你就知道公司□12306博客园□ Bootstrap O Jquery O JS This XMl file does not appear to have any style information associated with it. The document <z:anytypexmins:d1p1=http://www.w3.org/2001/xmlschema"xmins:i=http://www.w3.org/2001/xmlschemarinstance"xm i: type="dlp1: string"/z: anyType> 说明请求能够成功。 为什么这个请求能够成功呢?那是因为,当我们访问http://localhost:21528/api/order这个路 径的时候, Webapi的路山引擎会自动去匹配"api/{ controller}/{id}"这个模板,于是找到了控 制器是 Order这个,那么问题来了?它是如何定位到 GetAl1()这个方法的呢?这里就是和MvC不同 的地方,前面说过Webapi的路由规则是通过http方法去匹配对应的action,那么,我们通过浏 览器访问http://localhost:21528/api/order这个路径的时候,浏览器默认通过ur1访问的都 是get请求,于是 webapi的路由引擎就会去找 Order这个控制器里面的get请求的方法,由于没 有参数,所以自动匹配到了无参数的get请求→GetA11()方法,所以请求成功! 当然, baPi也支持MvC里面的路由机制,但 RestFul1风格的服务要求请求的ur1里面不能包含 action,所以,在 WebApi里面是并不提倡使用MVC路由机制的。 这是一个最简单的例子,下亩我们就来详细看看 Webapi里面的路由原理以及使用。 回到顶部 二、 WebApi路由基础 回到顶部 1、默认路由 上面我们提到了,新建一个 WebApi服务的时候,会自动在 WebApiconfig.cS文件里面生成一个默 认路由: configRoutesMaphttproutE( ame:Defaultapi routeTemplate: api/controller] defaults: new id= RouteParameter Optional ) 将Maphttproute()方法转到定义可以,它有四个重载方法 Namespace System Web Http ... public static class HttproutecOllectionexteNsions public static IhtTproute Ignoreroute(this HttproutecollEction routes string routename, strip +++++国 public static IhtTproute Ignoreroute(this HttproutecollEction routes string routename, strip publicstaticIhtTprouteMaphttpbatChroute(thisHttproutecolleCtionroutesstringroutename ..publlcstaticlittpioutenmaphttproUterthisHtupioutecorectionroutesstrlngname,stringIc ..publicstaticIhTtprouteMaphttprouTe(thisHttproutecollEctionroutesstringnamestringrc publicstaticIhtTprouteMaphttprouTe(thisHttproutecollEctionroutes,stringnamestringre ..publicstaticIhTtprouteMaphttprouTe(thisHttproutecollEctionroutesstringnamestringro 分别来看看各个参数的作用 name:;" DefaultApi"→表示此路由的名称,这里只需要保让路由名称不重复就OK了。 · routeTemplate:"api/{ contro1ler/{id}"→表示路的ur1规则,“ap1”是固定部分,要用来标识 当前请求的ur1是一个api服务的接口,区别MC的路由,当然,这里并不是一定要写成"api”,如果你 改成“ apiserver”,那么你请求的ur1里面也需要与成" pserver”;“{ contro1ler}”是控制器的占位 符部分,在真实的ur1里面,该部分对应的是具体的控制器的名称,这个和MC里面一致;“{id}”是参数 的占位符部分,表示参数,一般这个参数都会在 defau]t里面设置可选有了这个路由模板约束请求的ur1, 比如:我们请求的ur1写成http://localhost:21528/order那么肯定是找不到对应的路由的,因为api” 这个参数必选。如果请求的ur1匹配不到对应的路由,则会向客户端返回一个44的状态码。 defaults:new{id= Routeparameter, Optiona1}→表小路由的默认值,比如上面的 routeTemplate, controller}和{id}部分都可以设置默认值,比如: defau1ts改成new{ controller="0rder",id= RouteParameter.Optionaly那么我们请求http://localhost:21528/api这个ur1仍然能访问到 GetA1()方法。 constraints>表示路由约束,一般是一个约束路由模板的正则表达式。比如:我们加入约束条 件 constraints;new{id=@"\d+"},这就约束必须要匹配一到多个参数id,那么,我们在 Ordercontro11er里面加入另一个方法 public class OrderController Apicontroller [htTpget] public object GetAllo return Success [htTpgeti public object GetById(int id) return"Success"+ idi 我们通过http://localhost:21528/api/order/2来访问,得到结果 ←→ LOcalhost21528/api/ Order/2 组应用国博客园-开发青的.百度一下,你就知道□公司□12306博客 This XlL file does not appear to have any style information asso. <: anyType xmlns: d .w3.org/2001/xmlSchema"xmins:i=http://ww.t i:type-dlp1: strin">Success2/z anyType> 我们再通过http://localhost:21528/api/order/a来访问,得到结果 ←→ C D localhost:21528/api/ Order/a 应用国博客园开发者的图百一下,你就知道公司12306C博客园 O Bootstrap Http erRor 404.0- not Found 您要找的资源已被删除、已更名或暂时不可用 这个是很好理解的,id的值不匹配正则表达式 而我们访问http://localhost:21528/api/order结果: G>C localhost: 21528/api/Order 组应用博客园-开发者的四百度一下,你就知道口公司□12306C Http Error 404.0-not Found 您要拢的资源已被刷除、已更名或暂时不可用。 竟然连GetA11()方法都找不到了。这是为什么呢?原来就是这个约束在作怪,正则\d+表示匹配一 个或多个数字,所以如果请求的u1里面没有传数字,则自动匹配不到。所以,如果需要匹配无参 的方法,我们把约束改成这样: constraints:new {id=@"\d*"},这个表小匹型8个或多 个数字,再来试试 G>C localhost:21528/api/Order 应用国博客园-开发者的.圖百度一下,你就知道□公司12306□博客园 This XML file does not appear to have any style information associa <z:anytypexmins:dlpl=http://www.w3.org/2001/xmlSchemaxmins:i=http://www.w3.o i: type="dlp1: string >Success</z: any Type> 这样就OK了。 上述说了那么多都是约束id的,其实你也可以使用表达式去约束 controller、 action等等,但 般不常用,我们就不做过多讲解。 口到顶部 2、自定义路由 上面介绍了这么多,都是关于默认路由原理的介绍。除了默认路山,我们也可以自定义路由,我们将 WebApiconfig.Cs里面改成这样 public static class WebApiconfig publicstaticvoidRegister(httpconfigurationconfig // Web apt路由 configMaphttpattrIbuterouteso; //1.默认路由 configRoutesMaphttproute( name: DefaultApi routeTemplate: " api/controller/id] defaults: newi id= RouteParameter Optional y ) //2.自定义路由:匹配到 action configRoutesMaphttproutE( name:"ActionApi routeTemplate:actionapicontroller/taction/fidy defaults: new[ id RouteParameter. Optional) ); //3.自定义路由二 configRoutesMaphttproute( name: TestApi routeTemplate: testapi/controller]/fordertyperfidy defaults: new i ordertype= aa", id= Route Parameter. Optional y

...展开详情
试读 124P C#进阶系列--WebApi
立即下载 身份认证后 购VIP低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
C#进阶系列--WebApi 50积分/C币 立即下载
1/124
C#进阶系列--WebApi第1页
C#进阶系列--WebApi第2页
C#进阶系列--WebApi第3页
C#进阶系列--WebApi第4页
C#进阶系列--WebApi第5页
C#进阶系列--WebApi第6页
C#进阶系列--WebApi第7页
C#进阶系列--WebApi第8页
C#进阶系列--WebApi第9页
C#进阶系列--WebApi第10页
C#进阶系列--WebApi第11页
C#进阶系列--WebApi第12页
C#进阶系列--WebApi第13页
C#进阶系列--WebApi第14页
C#进阶系列--WebApi第15页
C#进阶系列--WebApi第16页
C#进阶系列--WebApi第17页
C#进阶系列--WebApi第18页
C#进阶系列--WebApi第19页
C#进阶系列--WebApi第20页

试读结束, 可继续阅读

50积分/C币 立即下载