<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      入門:構(gòu)建簡單的Web API

      WCF Web API支持多個宿主環(huán)境:自宿主(windows服務(wù)或者控制臺)和IIS宿主(asp.net webform/mvc)。這個入門文章主要演示在ASP.NET MVC3網(wǎng)站宿主:

      • 如何使用NuGet向項目中添加Web Api引用
      • 如何創(chuàng)建一個通過HTTP GET訪問的Web Api
      • 如何通過asp.net routes宿主一個Web Api
      • 如何通過瀏覽器或者Fiddler訪問Web Api
      • 如何在Api上啟用OData uri查詢
      • 如何用WCF Web Test Client測試WCF Web API

      1、創(chuàng)建一個基本的解決方案:使用VS2010新建一個空的ASP.NET MVC 3 Web Application

      image

      設(shè)置站點的端口號為9000

      image

      2、向解決方案中加入Web Api的引用

      通過NuGet來添加Web api的程序集引用,右擊項目屬性,選擇“Manage NuGet Packages”

      image

      在NuGet管理擴(kuò)展器上查詢Online的”webapi.all“

       

      image

      選擇安裝,NuGet就會下載所有所需的軟件包,現(xiàn)在可以開始開發(fā)Web Api。

      3、創(chuàng)建一個Contacts Api類

      右擊項目ContactManager選擇添加一個文件夾,取名”APIs“,然后在APIs文件夾上右擊添加類,類名叫做ContactsApi:

      using System.ServiceModel;
      namespace ContactManager.APIs
      {
      [ServiceContract]
      public class ContactsApi
      {
      }
      }
      ContractsApi 加了ServiceContractAttribute表示這是一個WCF 服務(wù),將通過HTTP方式暴露出來。
      4、通過asp.net routing注冊ContractsApi
      Api需要通過asp.net mvc宿主,使用ASP.net Route的MapServiceRoute擴(kuò)展方法把它注冊進(jìn)去。切換到global.asax.cs文件,添加以下引用
      using ContactManager.APIs;
      using System.ServiceModel.Activation;
      在RegisterRoutes方法里加入下述代碼
      routes.Add(new ServiceRoute("api/contacts", new HttpServiceHostFactory(), typeof(ContactsApi)));
       
      下面的黃色部分很重要,MVC的默認(rèn)路由是映射到controller + action
      public static void RegisterRoutes(RouteCollection routes)
      {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
      routes.Add(new ServiceRoute("api/contacts", new HttpServiceHostFactory(), typeof(ContactsApi)));
      routes.MapRoute(
      "Default", // Route name
      "{controller}/{action}/{id}", // URL with parameters
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
      );
      }

      MapServiceRoute需要一個泛型參數(shù)指定服務(wù)(API),以及一個將被追加到IIS base url的路徑。在這里,我們指定的“contacts”,也就是宿主為“http://localhost:9000/api/contacts”。

      5. 通過一個HTTP Get 方法暴露contacts:首先創(chuàng)建一個poco(Plain Old C#)Contract類,代表我們在api上傳遞的聯(lián)系人,本質(zhì)上就是一個DTO(數(shù)據(jù)傳輸對象),在HTTP上我們把它作為資源,然后創(chuàng)建一個HTTP Get方法暴露資源。

      右擊項目ContactManager項目選擇添加新的文件夾“Resources”,在Resources文件下創(chuàng)建一個新的類Contact。

      namespace ContactManager.Resources
      {
      public class Contact
      {
      public int ContactId { get; set; }
      public string Name { get; set; }
      }
      }

      返回到ContactApi類,添加下述引用:

      using System.ServiceModel.Web;
      using ContactManager.Resources;

      添加一個Get方法返回所有的contracts

      [WebGet(UriTemplate = "")]
      public IQueryable<Contact> Get()
      {
      var contacts = new List<Contact>()
      {
      new Contact {ContactId = 1, Name = "Phil Haack"},
      new Contact {ContactId = 2, Name = "HongMei Ge"},
      new Contact {ContactId = 3, Name = "Glenn Block"},
      new Contact {ContactId = 4, Name = "Howard Dierking"},
      new Contact {ContactId = 5, Name = "Jeff Handley"},
      new Contact {ContactId = 6, Name = "Yavor Georgiev"}
      };
      return contacts.AsQueryable();
      }

      Get方法上加了WebGet Attribute表示這是一個HTTP Get。注意這里的UriTemplate被設(shè)置為“”,默認(rèn)情況下,操作的Uri是方法名Get,在這種情況下,我們是在Route中設(shè)置的Uri。

      6、通過瀏覽器查詢Contracts.按F5運行項目,然后再瀏覽器地址欄中輸入http://localhost:9000/api/contacts

      image

      7、查詢返回Json格式的Contracts。HTTP提供了一些“內(nèi)容協(xié)商”機(jī)制 — 當(dāng)有多個可得的表現(xiàn)形式的時候,對特定的響應(yīng)選擇最好的表現(xiàn)形式的處理過程。

      服務(wù)器驅(qū)動協(xié)商(Server-driven Negotiation)

      如果響應(yīng)的最好的表現(xiàn)形式的選擇是通過服務(wù)器上的算法來實現(xiàn),那么這種方式的協(xié)商稱做服務(wù)器驅(qū)動協(xié)商。選擇是基于響應(yīng)可得的表現(xiàn)形式(根據(jù)不同的維度,響應(yīng)會不同;例如,語言,內(nèi)容編碼,等等)和請求消息里特定的頭域或關(guān)于請求的其他信息(如:網(wǎng)絡(luò)客戶端的地址)。
      服務(wù)器驅(qū)動協(xié)商是有優(yōu)點的,當(dāng)從可行的表現(xiàn)形式里進(jìn)行選擇的算法對用戶代理進(jìn)行描述是比較困難的時候,或者當(dāng)服務(wù)器期望發(fā)送“最好的猜測”給客戶端而只通過一個響應(yīng)(以避免后續(xù)請求的回路(一個請求會返回一個響應(yīng))延遲如果此“最好的猜測“對用戶適合的時候)的時候。為了改善服務(wù)器的猜測,用戶代理應(yīng)該包含請求頭域(Accept,Accept-Language,Accept-Encoding,等等),這些頭域能描述它對響應(yīng)的喜好。

      Web api返回的響應(yīng)很容易添加一種媒體類型(media types )。

      打開Fiddler,在“Request builder”欄輸入地址“http://localhost:9000/api/contacts”,然后移動到“Request Headers”在“User-Agent” 項下方添加 “Accept: application/json”

      wcfjson 

      按下 Exectue按鈕,雙擊左邊的Panel查看HTTP的response,切換到“Raw”Tab,你可以看到下面的json格式的數(shù)據(jù):

      image

      8、啟用OData 查詢支持

      Web API支持OData協(xié)議,接受OData的URI格式查詢,當(dāng)OData 查詢到達(dá)Web Api, 在返回客戶端之前在服務(wù)端會進(jìn)行必要的過濾和排序。查詢使用IQueryable 接口,服務(wù)端并沒有去查詢所有的數(shù)據(jù),發(fā)送過濾和排序到服務(wù)端。

      return contacts.AsQueryable();

      運行程序,在瀏覽器里輸入 http://localhost:9000/api/contacts?$Top=4&$OrderBy=Name ,看到瀏覽器之返回了按名字排序的top 4個contract

      webapiodata

      也可以通過Fidder去查詢,具體可參照第7步。

      9、WCF Web API也提供了一個WCF Web Test Client用于測試WCF Web API,通過配置啟用,在RegisterRoutes方法里創(chuàng)建HttpConfiguration 實例,并設(shè)置EnableTestClient屬性為True:

      var config = new HttpConfiguration() { EnableTestClient = true };

      然后把HttpConfiguration實例傳遞給HttpServiceHostFactory的配置屬性

      routes.Add(new ServiceRoute("api/contacts", new HttpServiceHostFactory() { Configuration = config }, typeof(ContactsApi)));

      按下F5 啟動調(diào)試項目,然后再瀏覽器后面加入/Test

      image

      總結(jié)

      通過這個Quick start,我們學(xué)習(xí)到了以下內(nèi)容

      • 如何使用NuGet向項目中添加Web Api引用
      • 如何創(chuàng)建一個通過HTTP GET訪問的Web Api
      • 如何通過asp.net routes宿主一個Web Api
      • 如何通過瀏覽器或者Fiddler訪問Web Api
      • 如何在Api上啟用OData uri查詢
      • 如何用WCF Web Test Client測試WCF Web API

      你可以在這里獲取到代碼。

      2011-10-4日更新到WebAPI 0.5 Preview

      posted @ 2011-06-30 21:28  張善友  閱讀(48128)  評論(15)    收藏  舉報
      主站蜘蛛池模板: 深夜福利资源在线观看| 五月综合婷婷开心综合婷婷| 免费萌白酱国产一区二区三区| 日韩区中文字幕在线观看| 麻豆一区二区三区精品视频| 香蕉亚洲欧洲在线一区| 漂亮的保姆hd完整版免费韩国| 日韩精品一区二区av在线| 亚洲第一福利网站在线观看| 一区二区三区激情免费视频 | 后入内射无码人妻一区| 啦啦啦视频在线日韩精品| 久久香蕉国产线看观看怡红院妓院| 亚洲图片自拍偷图区| 日本无码欧美一区精品久久| 欧洲精品色在线观看| 久久香蕉国产线看观看猫咪av| 精品人妻大屁股白浆无码| 亚洲精品中文字幕第一页| 国产午夜福利免费入口| 亚洲欧美日产综合在线网| 加勒比色综合久久久久久久久| 欧美成人精品三级网站视频| 欧美野外伦姧在线观看| 日韩人妻不卡一区二区三区| 怡红院一区二区三区在线| 成人性生交大片免费看r老牛网站| 久久精品国产88精品久久| 欧美孕妇乳喷奶水在线观看 | 高清免费毛片| 国产mv在线天堂mv免费观看| 综合久久av一区二区三区| 欧美三级a做爰在线观看| 成人免费视频一区二区三区| 少妇人妻偷人精品免费| 国内不卡一区二区三区| 欧美日本精品一本二本三区| 亚洲国产五月综合网| 亚洲成人av在线系列| 中文字幕色av一区二区三区| 久久精品国产亚洲不av麻豆|