真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ASP.NETWEBAPI的使用示例

這篇文章主要介紹ASP.NET WEB API的使用示例,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

在嵊泗等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需開(kāi)發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),全網(wǎng)營(yíng)銷推廣,外貿(mào)網(wǎng)站制作,嵊泗網(wǎng)站建設(shè)費(fèi)用合理。

在我前一篇博客中已經(jīng)給各位簡(jiǎn)單介紹了HTTP協(xié)議與RestFul API的關(guān)系,以及一些基本的HTTP協(xié)議知識(shí),在這些知識(shí)的鋪墊下,今天,我們一起來(lái)討論一下WEB API的適用場(chǎng)景,然后寫我們第一個(gè)WEB API接口,并演示如何對(duì)其進(jìn)行簡(jiǎn)單調(diào)用。

很多人都很迷惑,既然有了WCF為什么還要有WEB API?WEB API會(huì)不會(huì)取代WCF?

就我的看法,WCF提供的是一種RPC實(shí)現(xiàn)的集合,WCF的設(shè)計(jì)更多地考慮了SOA的場(chǎng)景,以及各種RPC的問(wèn)題。很多人也會(huì)說(shuō),RestFul API也是一種RPC啊,并且WCF中也有關(guān)于RestFul 的實(shí)現(xiàn)啊。很多資料中RPC和RestFul在風(fēng)格概念上是有一些區(qū)別的,其實(shí)我覺(jué)得這兩者的區(qū)別比較主觀,過(guò)度糾結(jié)這些就學(xué)院派了;我主要關(guān)注了實(shí)際使用上的一些問(wèn)題,在WCF中,支持的協(xié)議很多,WS-*系列協(xié)議,以及一些更簡(jiǎn)潔的協(xié)議,其中提供了一些專用通信協(xié)議的性能是非常高的,并且WCF還提供了服務(wù)發(fā)現(xiàn)等功能,我認(rèn)為WCF更適合內(nèi)部系統(tǒng)間的高性能調(diào)用,社區(qū)中也有其他一些RPC方案可以選擇,例如gRPC,Avor,thrift都是和WCF定位相同的產(chǎn)品;而WEB API是關(guān)注于HTTP RestFul風(fēng)格的產(chǎn)品,在此基礎(chǔ)上,任何語(yǔ)言、任何終端都能非常容易地進(jìn)行對(duì)接,并且能利用非常成熟的各種HTTP基礎(chǔ)設(shè)施和解決方案來(lái)進(jìn)行開(kāi)發(fā)、調(diào)試、負(fù)載均衡、內(nèi)容分發(fā)。所以,WEB API是一種針對(duì)HTTP的,偏重于快速開(kāi)發(fā)RestFul風(fēng)格開(kāi)放式API的開(kāi)發(fā)框架。目前看來(lái),他并不能取代WCF,他們各有適合的場(chǎng)景,不能認(rèn)為WEB API是WCF的替代產(chǎn)品。

OK,現(xiàn)在我們來(lái)開(kāi)發(fā)第一組WEB API接口!使用VS2012以后的版本都有現(xiàn)成的WEB API創(chuàng)建模板,大家跟著創(chuàng)建就好了,創(chuàng)建出來(lái)后,項(xiàng)目中會(huì)有MVC、WEB API的項(xiàng)目,WEB API對(duì)MVC有依賴,不能單獨(dú)創(chuàng)建!而WEB API和MVC都是利用類似的路由機(jī)制,所以在默認(rèn)路由中,WEB API 使用

/api/{controller}/{id}

作為路由,添加了/api/節(jié)以區(qū)分MVC和web api。

接下來(lái),我們添加一個(gè)WEB API的Controller,取名為PersonController,他繼承于ApiController;在創(chuàng)建這個(gè)Controller的時(shí)候,我們就定義了一種資源:Person,在PersonController里的所有操作均圍繞著Person這個(gè)資源來(lái)的。接下來(lái)我們開(kāi)始定義一組增刪改查操作。

在Web API中,默認(rèn)路由采用了一種約定:根據(jù)謂詞來(lái)進(jìn)行路由,而方法名的前綴就是調(diào)用該方法對(duì)應(yīng)使用的HTTP謂詞。代碼示例如下:

/// 

    /// Person 為資源,對(duì)Person進(jìn)行的一組操作    /// 

    public class PersonController : ApiController

    {        private static List _personLst = new List();       

        /// 

        /// 獲取一個(gè)Person        /// 

        /// Person的ID

        /// Person

        public Person GetPerson(long id)

        {            return _personLst.Find(x => x.Id == id);

        } 

        /// 

        /// 添加一個(gè)Person        /// 

        /// Person

        public void PostAddPerson(Person person)

        {

            _personLst.Add(person);

        } 

        /// 

        /// 修改一個(gè)        /// 

        /// Person Id

        /// 新

        public void PutModifyPerson(long id, Person person)

        {            var p = _personLst.Find(x => x.Id == id);

            p.Age = person.Age;

            p.Name = person.Name;

            p.Sex = person.Sex;

        } 

        /// 

        /// 刪除一個(gè)Person        /// 

        /// Person ID

        public void DeletePerson(long id)

        {

            _personLst.RemoveAll(x => x.Id == id);

        }

}

一個(gè)簡(jiǎn)單的針對(duì)資源的CRUD操作的API就好了,不用解析輸入,不用拼接輸出,就是那么簡(jiǎn)單!讓我們來(lái)遛一遛!

ASP.NET WEB API的使用示例

發(fā)送請(qǐng)求:謂詞為POST,語(yǔ)義創(chuàng)建Person,Person描述在Body里,head中聲明了Body通過(guò)Json序列化。

收到響應(yīng):響應(yīng)碼204,屬于2XX類型執(zhí)行成功,Body里沒(méi)有數(shù)據(jù)

ASP.NET WEB API的使用示例

發(fā)送請(qǐng)求:謂詞為GET,語(yǔ)義為查詢Person資源,Id為1的,head中聲明希望接收使用XML序列化的數(shù)據(jù)

收到響應(yīng):響應(yīng)碼為200,執(zhí)行成功,Body中有數(shù)據(jù),數(shù)據(jù)使用XML序列化

ASP.NET WEB API的使用示例

發(fā)送請(qǐng)求:謂詞為PUT,語(yǔ)義為修改ID為1的Person資源,修改內(nèi)容在Body中,Content-Type標(biāo)明Body使用Json序列化,在Body中我們將Name修改為Test1Changed

收到響應(yīng),響應(yīng)碼為204,執(zhí)行成功

ASP.NET WEB API的使用示例

發(fā)送請(qǐng)求:謂詞為GET,語(yǔ)義為查詢ID為1的Person資源,Accept標(biāo)明希望接收到Json數(shù)據(jù)

收到響應(yīng):可以看到Body為使用Json序列化的內(nèi)容,Name屬性已經(jīng)變更為Test1Changed

ASP.NET WEB API的使用示例

發(fā)送請(qǐng)求:謂詞為DELETE,語(yǔ)義為刪除ID為1的Person資源

收到響應(yīng):響應(yīng)碼204,執(zhí)行成功

ASP.NET WEB API的使用示例

發(fā)送請(qǐng)求:謂詞為GET,語(yǔ)義為查詢ID為1的Person資源,Accept標(biāo)明希望接收到Json數(shù)據(jù)

收到響應(yīng):響應(yīng)碼為200,執(zhí)行成功,響應(yīng)內(nèi)容為null,資源已刪除

這就是我用Fiddler來(lái)發(fā)送、調(diào)用的一組RestFul接口,大家可以看到,整個(gè)調(diào)用過(guò)程使用到了HTTP的語(yǔ)義,用到了謂詞路由、內(nèi)容協(xié)商。在增、刪、改操作中,我都是使用void作為返回值,根據(jù)HTTP Code 判斷,大家也可以自定義一些返回?cái)?shù)據(jù)來(lái)做出更進(jìn)一步的操作描述。

在寫了這些API后,我們需要在程序中調(diào)用,我以C#為例寫一組對(duì)這些接口調(diào)用的實(shí)現(xiàn)。在C#中,傳統(tǒng)調(diào)用HTTP接口一般有兩種辦法: WebRequest/WebResponse組合的方法調(diào)用和WebClient類進(jìn)行調(diào)用。第一種方法抽象程度較低,使用較為繁瑣;而WebClient主要面向了WEB網(wǎng)頁(yè)場(chǎng)景,在模擬Web操作時(shí)使用較為方便,但用在RestFul場(chǎng)景下卻比較麻煩,在Web API發(fā)布的同時(shí),.NET提供了兩個(gè)程序集:System.Net.Http和System.Net.Http.Formatting。這兩個(gè)程序集中最核心的類是HttpClient。在.NET4.5中帶有這兩個(gè)程序集,而.NET4需要到Nuget里下載Microsoft.Net.Http和Microsoft.AspNet.WebApi.Client這兩個(gè)包才能使用這個(gè)類,更低的.NET版本就只能表示遺憾了只能用WebRequest/WebResponse或者WebClient來(lái)調(diào)用這些API了。

在使用中,System.Net.Http這個(gè)程序集提供了HttpClient類以及相關(guān)的HTTP調(diào)用,而System.Net.Http.Formatting提供了一些針對(duì)HttpClient的幫助擴(kuò)展,更好地支持了內(nèi)容協(xié)商、Content創(chuàng)建等功能。下面我就和大家一起寫一下這個(gè)例子:

我們新建一個(gè)控制臺(tái)程序:

代碼如下:

public class Person

    {        public long Id { get; set; }        public string Name { get; set; } 

        public int Age { get; set; } 

        public string Sex { get; set; } 

        public override string ToString()

        {            return $"Id={Id} Name={Name} Age={Age} Sex={Sex}";

        }

    } 

    class Program

    {        static void Main(string[] args)

        {            var client = new HttpClient();

 

            client.BaseAddress = new Uri("http://localhost:22658/"); //基本的API URL
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); //默認(rèn)希望響應(yīng)使用Json序列化
 

 

            Run(client);

 

            Console.ReadLine();

 

        } 

        static async void Run(HttpClient client)

        {            var result = await AddPerson(client);

            Console.WriteLine($"添加結(jié)果:{result}"); //添加結(jié)果:true

 

            var person = await GetPerson(client);

            Console.WriteLine($"查詢結(jié)果:{person}"); //查詢結(jié)果:Id=1 Name=test Age=10 Sex=F
 

            result = await PutPerson(client);

            Console.WriteLine($"更新結(jié)果:{result}"); //更新結(jié)果:true
 

            result = await DeletePerson(client);

            Console.WriteLine($"刪除結(jié)果:{result}"); //刪除結(jié)果:true
        } 

        static async Task AddPerson(HttpClient client)

        {            return await client.PostAsJsonAsync("api/Person", new Person() { Age = 10, Id = 1, Name = "test", Sex = "F" }) //向Person發(fā)送POST請(qǐng)求,Body使用Json進(jìn)行序列化
                                     .ContinueWith(x => x.Result.IsSuccessStatusCode);  //返回請(qǐng)求是否執(zhí)行成功,即HTTP Code是否為2XX
        } 

        static async Task GetPerson(HttpClient client)

        {            return await await client.GetAsync("api/Person/1") //向Person發(fā)送GET請(qǐng)求
                .ContinueWith(x => x.Result.Content.ReadAsAsync(                              //獲取返回Body,并根據(jù)返回的Content-Type自動(dòng)匹配格式化器反序列化Body

                    new List() {new JsonMediaTypeFormatter()/*這是Json的格式化器*/

                                                    ,new XmlMediaTypeFormatter()/*這是XML的格式化器*/}));

 

        } 

        static async Task PutPerson(HttpClient client)

        {            return await client.PutAsJsonAsync("api/Person/1", new Person() { Age = 10, Id = 1, Name = "test1Change", Sex = "F" }) //向Person發(fā)送PUT請(qǐng)求,Body使用Json進(jìn)行序列化
                                    .ContinueWith(x => x.Result.IsSuccessStatusCode);  //返回請(qǐng)求是否執(zhí)行成功,即HTTP Code是否為2XX
        } 

        static async Task DeletePerson(HttpClient client)

        {            return await client.DeleteAsync("api/Person/1") //向Person發(fā)送DELETE請(qǐng)求
                .ContinueWith(x => x.Result.IsSuccessStatusCode); //返回請(qǐng)求是否執(zhí)行成功,即HTTP Code是否為2XX
        }

}

這就完成了這組API的調(diào)用,是不是非常簡(jiǎn)單方便?HTTPClient使用全異步的方法,并且他有良好的擴(kuò)展性,我會(huì)在之后的博客中再聊這個(gè)問(wèn)題。

以上是ASP.NET WEB API的使用示例的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


名稱欄目:ASP.NETWEBAPI的使用示例
分享網(wǎng)址:http://weahome.cn/article/pigdpg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部