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

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

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

      入門:添加一個支持獲取單一資源以及支持POST,PUT和DELETE方法

      WCF Web API支持多個宿主環境:自宿主(windows服務或者控制臺)和IIS宿主(asp.net webform/mvc)。這個入門文章主要演示在ASP.NET MVC3網站宿主,主要演示如何在一個Web API上允許更新:

      • 如何檢索一個特定項的資源
      • 如何在API上啟用HTTP POST, PUT和DELETE方法
      • 如何通過HTML表單發送一個POST到API

      這篇入門文章的場景是允許客戶端添加、刪除和更新系統的聯系人。

      1、解壓啟動器代碼

      要快速開始練習,請到這里下載代碼,下載解壓后,打開Start目錄下的ContactManager項目。代碼和入門:構建簡單的Web API的主要區別是實體代碼重構到一個內存 ContactManagerRepository。

      public interface IRepository<T>
      {
      T Find(int id);
      IQueryable<T> FindAll();
      void Add(T entity);
      void Remove(int id);
      void Save();
      }

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using ContactManager.Repositories;

      namespace ContactManager.Infrastructure
      {
      public abstract class InMemoryRepository<T> : IRepository<T> where T:new()
      {
      protected List<T> entities;
      protected int nextId;
      static InMemoryRepository<T> instance;
      static object lockObject = new object();

      public T Find(int id)
      {
      return entities.SingleOrDefault(e => IsEntityWithId(e, id));
      }

      public IQueryable<T> FindAll()
      {
      return entities.AsQueryable();
      }

      public void Add(T entity)
      {
      OnAdd(entity, nextId++);
      entities.Add(entity);
      }

      public void Remove(int id)
      {
      entities.RemoveAll(e => IsEntityWithId(e, id));
      }

      public void Save()
      {
      throw new InvalidOperationException();
      }

      protected abstract bool IsEntityWithId(T contact, int id);

      protected abstract void OnAdd(T entity, int newId);
      }
      }

      using ContactManager.Infrastructure;
      using ContactManager.Resources;

      namespace ContactManager.Repositories
      {
      public interface IContactRepository : IRepository<Contact>
      {
      }
      }

      2、啟用檢索一個單一的資源并和HttpResponseException協同工作

      目前我們的API只支持獲取一個聯系人集合。另一個通常的場景是通過一個URI返回一個單一的資源,如果找不到相關的資源應該返回一個404狀態碼。

      • 打開ContactsAp.cs
      • 復制以下方法
      [WebGet(UriTemplate="{id}")]

      public Contact GetItem(int id)

      {

      var contact = repository.Find(id);

      if (contact == null)

      throw new HttpResponseException(HttpStatusCode.NotFound);

      return contact;

      }
      • 注意GET方法接受一個ID參數映射到{id} uri模板參數。如果你的請求API是http://localhost:9000/api/contacts/1 的ID將被設置為1,Web API支持將模板參數自動轉換為原生類型int。
      • 如果聯系人不存在,就拋出HttpResponseException 并設置狀態碼
      • 編譯并運行(F5)
      • 打開Fiddler并在“Request builder”欄輸入地址“http://localhost:9000/api/contacts/1”
      • 拷貝以下內容到header

      Accept: application/json

      • 運行執行按鈕,Contract 1按json格式返回
      HTTP/1.1 200 OK
      Server: ASP.NET Development Server/10.0.0.0
      Date: Tue, 19 Jul 2011 13:04:26 GMT
      X-AspNet-Version: 4.0.30319
      Content-Length: 35
      Cache-Control: private
      Content-Type: application/json; charset=utf-8
      Connection: Close

      {"ContactId":1,"Name":"Phil Haack"}

      3、添加對POST的支持

      以下代碼是添加一個新的Post方法,添加一個新的Contract

      [WebInvoke(UriTemplate = "", Method="POST")]

      public Contact Post(Contact contact)

      {

      repository.Add(contact);

      return contact;

      }
      上面代碼里用到了WebInvokeAttribute,對于所有的HTTP GET以外的其他方法,使用此屬性。 該方法指定的參數的必須是大寫的。
      4、以Json格式發送數據
      Web Api允許以多個格式發送內容,下面是使用fiddler發送json的POST
      • 運行項目
      • 啟動Fiddler并切換到“Request Builder”
      • 選擇“POST”方法,輸入以下Uri:http://localhost:9000/api/contacts 
      • 拷貝以下內容到“Request Headers”
      Accept: application/json

      Content-Type: application/json

      • 拷貝以下內容到“Request Body”
        {"Name":"New Person1"}

        image
      • 按下“Execute”,返回Json格式的新的Contact ,id為7
      HTTP/1.1 200 OK
      Server: ASP.NET Development Server/10.0.0.0
      Date: Tue, 19 Jul 2011 13:12:57 GMT
      X-AspNet-Version: 4.0.30319
      Content-Length: 36
      Cache-Control: private
      Content-Type: application/json; charset=utf-8
      Connection: Close

      {"ContactId":7,"Name":"New Person1"}
       
      5、以XML格式發送數據
      • 以xml方式發布,需要替換“Request Headers”為以下內容
        Content-Type: application/xml

        Accept: application/xml
      • 替換“Request Body”為以下內容
      <Contact>
      <Name>New Person2</Name>
      </Contact>
       
      • 按下“Execute”,然后雙擊左窗格中的結果,選擇“RAW”標簽,返回的結果應該是XML,并顯示創建了ID為8的一個聯系人
       
      HTTP/1.1 200 OK
      Server: ASP.NET Development Server/10.0.0.0
      Date: Tue, 19 Jul 2011 13:25:50 GMT
      X-AspNet-Version: 4.0.30319
      Content-Length: 105
      Cache-Control: private
      Content-Type: application/xml; charset=utf-8
      Connection: Close

      <?xml version="1.0" encoding="utf-8"?><Contact><ContactId>8</ContactId><Name>New Person2</Name></Contact>

      6、從一個簡單的HTML表單發送內容
      Web API包含從HTML表單的內容發送的直接支持,下面,你添加一個ContactsContrller和相應的View,通過一個HTML表單向Web API發送請求并創建一個Contact
      • 右鍵單擊項目并選擇添加Contrller,輸入名字為ContactsController 并按下添加
      • 拷貝以下代碼到ContactsController
      public ActionResult Create()
      {
      return View();

      }
      • 右鍵Create方法選擇 Add-〉New View,并按下”Enter”
      • 打開“Create.cshtml”并把以下代碼貼進去
      @{

      Layout = null;

      }

      <!DOCTYPE html>

      <html>

      <head>

      <title>Create new Contact</title>

      </head>

      <body>

      <h1>Create new Contact</h1>

      <form method="post" action="/api/contacts" id="addContact"

      enctype="application/x-www-form-urlencoded">

      <table>

      <tr>

      <td>

      Name

      </td>

      <td>

      <input type="text" name="Name" />

      </td>

      </tr>

      <tr>

      <td colspan="2" align="center">

      <input type="submit" value="Add" />

      </td>

      </tr>

      </table>

      </form>

      </body>

      </html>

      7、添加PUT的支持

      添加對PUT和DELETE的支持是非常容易的,像POST一樣也是使用WebInvoke 制定PUT和DELETE

      • 打開ConactApi.cs把以下代碼拷進去
      [WebInvoke(UriTemplate ="{id}", Method = "PUT")]
      public Contact Put(Contact contact, int id)
      {
      var existingContact = repository.Find(id);
      if (existingContact == null)
      {
      throw new HttpResponseException(HttpStatusCode.NotFound);
      }
      existingContact.Name = contact.Name;
      return existingContact;

      }
      和DELETE類似,PUT方法在沒有找到Contact的情況下,返回一個404狀態碼
      • 編譯運行(F5)
      • 啟動Fiddler,并切換到“Request Builder”,設置方法為PUT,輸入http://localhost:9000/api/contacts/1,在Request Header輸入以下內容
      Content-Type: application/json

      • 拷貝以下內容到“Request Body”
      {

      "Name":"Updated Contact"

      }

      • 按下“Execute”
      • 被更新的contact返回,結果如下表明PUT成功
        HTTP/1.1 200 OK
        Server: ASP.NET Development Server/10.0.0.0
        Date: Tue, 19 Jul 2011 13:50:28 GMT
        X-AspNet-Version: 4.0.30319
        Content-Length: 40
        Cache-Control: private
        Content-Type: application/json; charset=utf-8
        Connection: Close

        {"ContactId":1,"Name":"Updated Contact"

      8、添加對DELETE的支持

      • 切換到ContactApi.cs并復制以下內容:
      [WebInvoke(UriTemplate = "{id}", Method = "DELETE")]

      public Contact Delete(int id)

      {

      var contact = repository.Find(id);

      if (contact == null)

      {

      throw new HttpResponseException(HttpStatusCode.NotFound);

      }

      repository.Remove(id);

      return contact;

      }
      HTTP/1.1 200 OK
      Server: ASP.NET Development Server/10.0.0.0
      Date: Tue, 19 Jul 2011 13:55:23 GMT
      X-AspNet-Version: 4.0.30319
      Content-Length: 40
      Cache-Control: private
      Content-Type: application/json; charset=utf-8
      Connection: Close

      {"ContactId":1,"Name":"Updated Contact"}
      • 切換Fiddler的方法為GET,然后執行,返回狀態碼為404

      HTTP/1.1 404 Not Found
      Server: ASP.NET Development Server/10.0.0.0
      Date: Tue, 19 Jul 2011 13:58:08 GMT
      X-AspNet-Version: 4.0.30319
      Cache-Control: private
      Content-Length: 0
      Connection: Close

      • 再次切換方法為DELETE,然后執行,也返回狀態碼404

      總結:在這篇入門文章里我們學習了以下內容:

      • 如何添加檢索一個單一的資源
      • 如何設置一個方法返回一個404  處理異常情況下的HTTP 響應。
      • 如何支持POST和URL編碼形式。
      • 如何支持PUT和DELETE。

      最新版本參考:Getting started: Adding support for getting a single resource and supporting POST, PUT and DELETE methods



       

      posted @ 2011-07-19 22:03  張善友  閱讀(9083)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 岛国一区二区三区高清视频| 亚洲国产成熟视频在线多多 | 91午夜福利在线观看精品| 国产精品无码一区二区三区电影| 无码高潮爽到爆的喷水视频| 亚洲婷婷综合色高清在线 | 国产亚洲精品岁国产精品| 亚洲欧美中文字幕5发布| 国产国拍亚洲精品永久软件| 国产美女被遭强高潮免费一视频| 国产精品福利自产拍久久| 国产精品污www在线观看| 国产日韩av一区二区在线| 丁香婷婷色综合激情五月| 国产v综合v亚洲欧美久久| 午夜欧美精品久久久久久久| 国产精品成人一区二区不卡 | 麻豆精品在线| 99久久国产福利自产拍| 狠狠躁夜夜躁人人爽天天5| 7m精品福利视频导航| 视频一区二区三区四区不卡| 成人拍拍拍无遮挡免费视频| 四虎成人在线观看免费| 中文字幕制服国产精品| 欧美私人情侣网站| 亚洲精品一区二区三区色| 亚洲成在人线AⅤ中文字幕| 久久综合伊人77777| 老司机性色福利精品视频| 成人年无码av片在线观看| 资源在线观看视频一区二区| 久久精品国产亚洲av麻豆长发| 偷拍一区二区三区在线视频| 午夜国产福利片在线观看| 中文字幕乱码人妻二区三区| 东京热一精品无码av| 日韩人妻无码一区二区三区| 中文字幕在线亚洲精品| 达拉特旗| 亚洲精品一区二区三区不|