C#进阶之WebAPI(三)
今天復習一下WebAPI的路由知識:
首先分析一下MVC路由和WebAPI路由的區別:
在mvc里,默認的路由機制是通過URL路徑去匹配控制器和Action方法的,在mvc中的默認路由定義在App_Start文件夾下的RouteConfig.cs文件下:
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 = "Home", action = "Index", id = UrlParameter.Optional });}}在webapi里,默認的路由機制是通過URL路徑去匹配控制器,然后通過http的方法去匹配Action的,在WebAPI中的默認路由定義在App_Start文件夾下的WebApiConfig.cs文件下:
public static class WebApiConfig{public static void Register(HttpConfiguration config){// Web API 配置和服務// Web API 路由config.MapHttpAttributeRoutes();config.Routes.MapHttpRoute(name: "RestFulApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional });}}?
WebApi的路由基礎:
將MapHttpRoute方法轉定義有4個重載的方法:
//// 摘要:// 映射指定的路由模板。//// 參數:// routes:// 應用程序的路由的集合。//// name:// 要映射的路由的名稱。//// routeTemplate:// 路由的路由模板。//// 返回結果:// 對映射路由的引用。public static IHttpRoute MapHttpRoute(this HttpRouteCollection routes, string name, string routeTemplate);//// 摘要:// 映射指定的路由模板并設置默認路由值。//// 參數:// routes:// 應用程序的路由的集合。//// name:// 要映射的路由的名稱。//// routeTemplate:// 路由的路由模板。//// defaults:// 一個包含默認路由值的對象。//// 返回結果:// 對映射路由的引用。public static IHttpRoute MapHttpRoute(this HttpRouteCollection routes, string name, string routeTemplate, object defaults);//// 摘要:// 映射指定的路由模板并設置默認路由值和約束。//// 參數:// routes:// 應用程序的路由的集合。//// name:// 要映射的路由的名稱。//// routeTemplate:// 路由的路由模板。//// defaults:// 一個包含默認路由值的對象。//// constraints:// 一組表達式,用于指定 routeTemplate 的值。//// 返回結果:// 對映射路由的引用。public static IHttpRoute MapHttpRoute(this HttpRouteCollection routes, string name, string routeTemplate, object defaults, object constraints);//// 摘要:// 映射指定的路由模板并設置默認的路由值、約束和終結點消息處理程序。//// 參數:// routes:// 應用程序的路由的集合。//// name:// 要映射的路由的名稱。//// routeTemplate:// 路由的路由模板。//// defaults:// 一個包含默認路由值的對象。//// constraints:// 一組表達式,用于指定 routeTemplate 的值。//// handler:// 請求將被調度到的處理程序。//// 返回結果:// 對映射路由的引用。public static IHttpRoute MapHttpRoute(this HttpRouteCollection routes, string name, string routeTemplate, object defaults, object constraints, HttpMessageHandler handler);看看每個參數的作用:
name:表明路由的名稱,注冊多個路由時保證不重復就行;
routeTemplate:路由匹配規則。默認是“api/{controller}/{id}”,前面的api是用來區分mvc路由的,不是必選項,是可變的,{controller}是控制器的占位符,{id}是形參的占位符;
defaults:一個包含默認路由值的對象,可以設置controller的默認值;
constraints:對形參的約束;
注冊的路由是按照注冊先后的順序進行匹配的,注冊越靠前,優先級越大
我們知道,WebApi是符合RESTful風格的,那么如果在一個控制器內部,我們需要提供多個相同的http方法,相同參數的接口我們應該怎么解決呢?
1:活用[Route("")]
在相同請求方法的action的前面可以加上[Route]路由特性進行區分:
?
?
?和朋友聊了一下,發現這個做法本身就和RESTful風格相抵觸,所以就不深究了,一般是對action進行重載,而不是在這上面想辦法。
總結
以上是生活随笔為你收集整理的C#进阶之WebAPI(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 毛骨悚然!女子吃桃钻出蜈蚣 被咬成香肠嘴
- 下一篇: 第十三节:实际开发中使用最多的监视锁Mo