日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#进阶之WebAPI(三)

發布時間:2023/12/10 C# 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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]路由特性進行區分:
?

/// <summary> /// 這里可以通過http://localhost:xxxx/api/Values對這個action進行訪問 /// </summary> /// <returns></returns> public IEnumerable<string> Get1() { return new string[] { "value1", "value2" }; } /// <summary> /// 這里可以通過http://localhost:xxxx/apis/Values/qqqqq對這個action進行訪問 /// </summary> /// <returns></returns> [Route("apis/Values/qqqqq")] public IEnumerable<string> Get2() { return new string[] { "value3", "value4" }; }


?

?和朋友聊了一下,發現這個做法本身就和RESTful風格相抵觸,所以就不深究了,一般是對action進行重載,而不是在這上面想辦法。

總結

以上是生活随笔為你收集整理的C#进阶之WebAPI(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。