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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【ASP.NET Web API2】初识Web API

發(fā)布時間:2023/12/13 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ASP.NET Web API2】初识Web API 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

Web Api 是什么?

MSDN:ASP.NET Web API 是一種框架,用于輕松構(gòu)建可以訪問多種客戶端(包括瀏覽器和移動設(shè)備)的 HTTP 服務(wù)

百度百科:Web API是網(wǎng)絡(luò)應(yīng)用程序接口。

個人理解:Web API 是提供給多種客戶端對data做CRUD(增刪查改)操作的統(tǒng)一接口

-------------------------------------------

Asp.net Web API 支持多種寄宿方式

1,IIS作為宿主(創(chuàng)建一個Asp.net web應(yīng)用程序作為Web API 的宿主)

2,自宿主(不需要IIS支持,使用任意的應(yīng)用程序作為宿主【控制臺、Windows Forms、WPF甚至Windows Service】)

?

?

看了Artech大神的一小節(jié)Web API,記錄一下學(xué)到的東西?

[構(gòu)建簡單的Web API]

1,以Web Host方式寄宿Web API

? ? ?Visual Studio 為我們提供了專門用于創(chuàng)建ASP.NET Web API應(yīng)用的項目模板,我們可以一鍵式創(chuàng)建一個完整的APS.NET Web API項目。

這里先不使用Visual Studio自動創(chuàng)建的。我們完全在創(chuàng)建的空項目中編寫我們的程序。

1.1 ?構(gòu)建解決方案

  • ?API: 一個空的類庫項目,表現(xiàn)為HttpController類型的Web API就定義在此項目中
  • Model:一個空的類庫項目,實體類定義在這里
  • WebHost:一個空的ASP.NET Web應(yīng)用程序

1.2 定義Web API

? ? ? ?在正式定義Web API 之前,我們需要在項目Model中定義一個代表聯(lián)系人的實體類Contact,這里做簡單的定義

public class Contact{public string ID { get; set; }public string Name { get; set; }public string PhoneNum { get;set; }}

?? ? ? ?Web API定義在API項目中,需要繼承ApiController,ApiController定義在程序集“System.Web.Http.dll”, 程序集在“C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Stack 5\Packages\Microsoft.AspNet.WebApi.Core.5.0.0\lib\net45”可以找到

? ? ? ?在ContactsController中,我們定義了Get、Post、Put、Delete這4個Action,它們分別實現(xiàn)了針對聯(lián)系人的查詢、添加、修改、刪除操作。Action方法Get具有一個表示聯(lián)系人ID的可缺省參數(shù),如果該參數(shù)存在則返回對應(yīng)的聯(lián)系人,否則返回整個聯(lián)系人列表。由于ASP.NET Web API默認實現(xiàn)了Action方法與HTTP方法的映射,所以方法名也體現(xiàn)了它們各自能處理的請求必須采用HTTP方法

public class ContactsController : ApiController{List<Contact> contacts;public ContactsController(){contacts = new List<Contact>();contacts.Add(new Contact() { ID = "001", Name = "小白", PhoneNum = "13529093839" });contacts.Add(new Contact() { ID = "002", Name = "大白", PhoneNum = "13529093838" });contacts.Add(new Contact() { ID = "003", Name = "小黑", PhoneNum = "13529088838" });}public IEnumerable<Contact> Get(string id=null) {return from c in contacts where c.ID==id||string.IsNullOrEmpty(id) select c; }public void Post(Contact item) {contacts.Add(item);}public void Put(Contact item) {contacts.Remove(contacts.First(c => c.ID == item.ID));contacts.Add(item);}public void Delete(string id) {contacts.Remove(contacts.First(c => c.ID == id));}}

1.3 將WebHost作為Web API的宿主

? ? WebHost在解決方案中是一個空的ASP.NET Web應(yīng)用程序,我們還需要為其添加一些必需的程序集引用。

  • ? ? System.Web.Http;(\Microsoft.AspNet.WebApi.Core.5.0.0\lib\net45)
  • ? ? System.Web.Http.WebHost;(\Microsoft.AspNet.WebApi.WebHost.5.0.0\lib\net45)
  • ? ??System.Net.Http;
  • ? ??System.Net.Http.Formatting;(\Microsoft.AspNet.WebApi.Client.5.0.0\lib\net45)

? 我們需要在WebHost項目中添加一個Global.asax全局配置文件,注冊一個默認路由,路由系統(tǒng)會解析當前請求訪問的目標HttpController和Action的名稱

?

protected void Application_Start(object sender, EventArgs e){GlobalConfiguration.Configuration.Routes.MapHttpRoute(name: "Default",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional });}

?

  路由規(guī)則中沒有表示目標Action的路由參數(shù),ASP.NET Web API如何根據(jù)請求確定哪個Action方法應(yīng)該被調(diào)用呢?其實它能根據(jù)請求采用HTTP方法來確定目標Action方法。當然在注冊路由模板中提供代表Action名稱的路由參數(shù)({action})也是支持的。

? ? ?現(xiàn)在Web API的以WebHost為宿主的工作就完成了,我們可以利用瀏覽器來調(diào)用寄宿的Web API來判斷寄宿工作是否成功。由于瀏覽器在默認情況下訪問我們在地址欄中輸入的地址總是采用HTTP-GET請求,所以我們只能利用它來調(diào)用支持HTTP-GET的Action方法,即定義在ContactsController中的Get方法。

?采用Chrome瀏覽器可以看到我們獲取的聯(lián)系人列表是XML格式的數(shù)據(jù)表示,對于ASP.NET Web API 來說,它會優(yōu)先利用請求報頭"Accept"攜帶的媒體類型來確定相應(yīng)內(nèi)容應(yīng)用的表現(xiàn)形式。

如下所示是Chrome訪問“http://localhost:3697/api/contacts/001”發(fā)送請求的內(nèi)容,它之所以會得到以XML表示的響應(yīng)是因為“Accept”報頭指定的媒體類型列表中只有“application/xml”被ASP.NET Web API支持。如果我們使用IE,請求的“Accept”報頭將攜帶不同的媒體類型列表,我們實際上會得到以JSON格式表示的響應(yīng)結(jié)果

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding:gzip, deflate, sdch Accept-Language:zh-CN,zh;q=0.8 Cache-Control:max-age=0 Host:localhost:3697 Proxy-Connection:keep-alive User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36

我們利用Fiddler來發(fā)送調(diào)用Web API的HTTP請求,獲取以JSON格式表示的響應(yīng)結(jié)果。

如圖,利用Fiddler發(fā)送了一個針對目標地址"http://localhost:3697/api/contacts/001"的Http-GET請求,并添加了一個值為"application/json"的“Accept”報頭,Execute發(fā)送請求之后確實得到了Json格式表示的聯(lián)系人列表

?

使IIS支持Put和Delete請求

? ? ? ?在定義ContactsController的時候,我們分別采用Get、Post、Put、Delete作為獲取、創(chuàng)建、修改和刪除聯(lián)系人的操作所支持的HTTP方法。但是IIS默認是不支持Put和Delete請求的

? ? ? IIS拒絕PUT和DELETE請求是由默認注冊的一個名為"WebDAVModule"的自定義HttpModule導(dǎo)致的。解決這個問題最為直接的方式就是將注冊的HttpModule移除

<system.webServer><modules runAllManagedModulesForAllRequests="true"><remove name="WebDAVModule"/></modules> </system.webServer>

2,自宿主的方式寄宿Web API

? ?我們在原來的解決方案中添加一個空的控制臺應(yīng)用程序SelfHost作為宿主

?

?

?

?

跟WebHost一樣,引用解決方案中的API.dll,同樣需要應(yīng)用一些必需的程序集(紅色為與WebHost不同的)

?

?

  • ? ? System.Web.Http;(\Microsoft.AspNet.WebApi.Core.5.0.0\lib\net45)
  • ? ? System.Web.Http.SelfHost;(\Microsoft.AspNet.WebApi.SelfHost.5.0.0\lib\net45)
  • ? ??System.Net.Http;
  • ? ??System.Net.Http.Formatting;(\Microsoft.AspNet.WebApi.Client.5.0.0\lib\net45)

通過前面的WebHost,我們知道接下來需要做的是注冊路由了。在此之前我們還需要動態(tài)加載解決方案中的程序集API.dll,

下面是Artech大神在 【在一個空ASP.NET Web項目上創(chuàng)建一個ASP.NET Web API 2.0應(yīng)用?】中寫的, 有個錯誤的地方httpServer.OpenAsync()后沒有執(zhí)行Wait()方法,導(dǎo)致計算機并未分配一個端口給程序,這讓我折騰了好久,不過也學(xué)到了其他知識,比如:[如何查看計算機某個端口被誰占用]?

?

static void Main(string[] args){ Assembly.Load("API,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null");HttpSelfHostConfiguration configuration = new HttpSelfHostConfiguration("http://127.0.0.1:7304");using (HttpSelfHostServer httpServer = new HttpSelfHostServer(configuration)){httpServer.Configuration.Routes.MapHttpRoute(name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional });httpServer.OpenAsync();//糾正:httpServer.OpenAsync().Wait();Console.Read();}}

?

當我們沒有執(zhí)行Wait()方法時,查看一下計算機是否有分配端口

1,首先調(diào)出命令窗口:開始---->運行---->cmd,或者是window+R組合鍵

2,輸入命令:netstat -ano,可以看到所有端口的情況。發(fā)現(xiàn)找了幾百遍也是找不到7304端口的

如果你加了Wait(),運行后出現(xiàn)

“HTTP 無法注冊 URL http://+:****/。進程不具有此命名空間的訪問權(quán)限(有關(guān)詳細信息,請參見 http://go.microsoft.com/fwlink/?LinkId=70353)”

?

你只要以管理員的身份打開Visual Studio就可以了

?

轉(zhuǎn)載于:https://www.cnblogs.com/Sunlimi/p/webapi-start.html

總結(jié)

以上是生活随笔為你收集整理的【ASP.NET Web API2】初识Web API的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 明星毛片 | 天天干天天干天天干天天 | 精品熟妇无码av免费久久 | 伊人视频 | 亚洲自拍偷拍av | 国产青青在线 | 欧美欧美欧美 | 51ⅴ精品国产91久久久久久 | 国产精品123 | 久久视频一区二区三区 | xfplay5566色资源网站 | 尤物视频在线观看国产性感 | 无限国产资源 | 日韩欧美视频一区二区 | 亚洲素人在线 | 韩国中文字幕在线观看 | 成人av动漫在线 | 极品国产在线 | 欧美三级欧美成人高清 | 91狠狠综合 | 国产三级午夜理伦三级 | 色综合久久天天综合网 | 无码人妻精品一区二区蜜桃网站 | 日韩福利视频在线观看 | 美女扒开腿男人爽桶 | 国产成人精品a视频一区 | 91精品视频在线看 | 色婷婷丁香 | 少妇献身老头系列 | 无码人妻精品一区二区三区不卡 | 久久精品国产亚洲AV成人婷婷 | 新91av| 九一av | 日韩在线视频免费播放 | 日本网站免费观看 | 樱井莉亚av | 国产精品羞羞答答在线观看 | 欧美成人一二三区 | 久久久天堂国产精品女人 | 国产精品一区二区久久 | 自拍偷拍校园春色 | 色网网站 | 国产午夜一级一片免费播放 | 我要色综合天天 | av网站在线观看不卡 | 亚洲熟女一区二区 | 啪啪福利视频 | 亚洲av无一区二区三区怡春院 | 欧美 日韩 国产 成人 | 国产嘿咻| 秋霞在线视频 | 国产精品嫩草久久久久 | 欧美天堂网站 | 污视频在线免费观看 | 99热精品在线播放 | 成人一区视频 | 黄色精品在线观看 | 日本一区二区三区在线看 | 波多野结衣一区在线 | 黄色片一区 | 西比尔在线观看完整视频高清 | 九九视频精品在线 | 国产原创在线播放 | 8x8ⅹ国产精品一区二区 | 一本之道高清无码视频 | 三叶草欧洲码在线 | 91丨国产丨捆绑调教 | 久草一区二区 | 一区二区三区激情视频 | 国产在线资源 | 国产乱码精品一区二区三区中文 | 阿v天堂在线 | 五月开心网 | 国产又粗又猛又黄又爽无遮挡 | 欧洲人妻丰满av无码久久不卡 | 五月激情开心网 | 91色国产| 九色视频偷拍少妇的秘密 | 久久精品国产精品亚洲 | 亚洲人成电影在线播放 | 欧美激情性生活 | 成年免费视频黄网站在线观看 | 在线观看欧美一区 | 丁香啪啪综合成人亚洲 | 色午夜 | 成人久久电影 | 国产一区在线观看免费 | 中文字幕在线网址 | 成人入口| 人人干人人艹 | 国产一区二区三区成人 | 亚洲三级在线看 | 黄色片免费观看视频 | 爱草av| 干b视频在线观看 | 黄色a∨| av成人在线网站 | 97精品一区二区三区 | 欧美无砖专区免费 |