操作 ASP.NET Web API 的執行個體教程

來源:互聯網
上載者:User

概述

REST(Representational State Transfer具象狀態傳輸)而產生的REST API的討論越來越多,微軟在ASP.NET中也添加了Web API的功能。

我們剛好看看Web API的使用,且看目前的版本有沒有解決掉這個問題。

項目建立

在安裝了Visual Studio 2012後,我們依次點擊建立項目->已安裝模板->Web->ASP.NET MVC 4 Web Application建立一個工程項目。

項目模板選擇Web API。

在Model裡面我們還是添加之前文章裡面使用的User類。

1 namespace WebAPI.Models
2 {
3 public class Users
4 {
5 public int UserID { get; set; }
6
7 public string UserName { get; set; }
8
9 public string UserEmail { get; set; }
10 }
11 }

將自動產生的ValueController修改成UsersController。

GET資料

使用HTTP的get方法請求擷取資料,整個Web API的請求處理基於MVC架構。

代碼如下。

1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Net;
5 using System.Net.Http;
6 using System.Web.Http;
7 using WebAPI.Models;
8
9 namespace WebAPI.Controllers
10 {
11 public class UsersController : ApiController
12 {
13 /// <summary>
14 /// User Data List
15 /// </summary>
16 private readonly List<Users> _userList = new List<Users>
17 {
18 new Users {UserID = 1, UserName = "Superman", UserEmail = "Superman@cnblogs.com"},
19 new Users {UserID = 2, UserName = "Spiderman", UserEmail = "Spiderman@cnblogs.com"},
20 new Users {UserID = 3, UserName = "Batman", UserEmail = "Batman@cnblogs.com"}
21 };
22
23 // GET api/Users
24 public IEnumerable<Users> Get()
25 {
26 return _userList;
27 }
28
29 // GET api/Users/5
30 public Users GetUserByID(int id)
31 {
32 var user = _userList.FirstOrDefault(users => users.UserID == id);
33 if (user == null)
34 {
35 throw new HttpResponseException(HttpStatusCode.NotFound);
36 }
37 return user;
38 }
39
40 //GET api/Users/?username=xx
41 public IEnumerable<Users> GetUserByName(string userName)
42 {
43 return _userList.Where(p => string.Equals(p.UserName, userName, StringComparison.OrdinalIgnoreCase));
44 }
45 }
46 }

構造了一個user list,實現了三個方法,我們下面來做請求。

使用不同的瀏覽器請求的過程中會發現返回的格式不一樣。

先使用Chrome請求,我們發現HTTP Header裡面的Content-Type是xml類型。

我們再換FireFox請求,發現Content-Type還是xml類型。

我們再使用IE請求,發現是這樣。

開啟儲存後的檔案,我們發現請求到的資料是JSON格式。

造成這樣的差異的原因是:不同的瀏覽器發送的Request Header裡面的Content-Type不一致造成的。

我們可以使用Fiddler驗證一下。

Content-Type:text/json

Content-Type:text/xml

POST資料

實現一個User添加的功能,接受的類型為User實體,而我們POST的資料為對應的JSON資料,看看dudu在Beta版本的遇到的問題有沒有解決。

1 //POST api/Users/Users Entity Json
2 public Users Add([FromBody]Users users)
3 {
4 if (users == null)
5 {
6 throw new HttpRequestException();
7 }
8 _userList.Add(users);
9 return users;
10 }

我們還是使用Fiddler進行類比POST資料。

在POST請求前,我們先將代碼附加到進程裡面,並在Add方法處設定斷點。

在Visual Studio 2012中,debug HOST的程式變成了IIS Express。

我們使用Ctrl+ALT+P,附加到它的進程裡面。

下面使用Fiddler進行類比POST。

注意在Request Header裡面的Content-Type為text/json,POST的json內容為:

1 {"UserID":4,"UserName":"Parry","UserEmail":Parry@cnblogs.com}

點擊Execute後,跳到了我們前面設定的斷點處,我們看看提交過來的資料。

這樣dudu在Beta裡面遇到的問題已解。

結語

ASP.NET架構一路發展而來,的確功能做的越來越強大、方便。希望我們能摒棄語言的爭論,迴歸純粹的技術討論上來,都說微軟的技術變化太快,變的本質是什麼呢?難道不變就是好的嗎?

第二部分我們將一起看一看Web API裡面的一些安全驗證的問題。

有所錯誤之處,望指出、討論。

喜歡的話,點個推薦是對文章最好的肯定。 :)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.