ASP.NET Web API(一):使用初探,GET和POST數據

概述

REST(Representational State Transfer表述性狀態轉移)而產生的REST API的討論愈來愈多,微軟在ASP.NET中也添加了Web API的功能json

項目創建

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

項目模板選擇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數據

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebAPI.Models;

namespace WebAPI.Controllers
{
    public class UsersController : ApiController
    {
        /// <summary>
        /// User Data List
        /// </summary>
        private readonly List<Users> _userList = new List<Users>
        {
            new Users {UserID = 1, UserName = "Superman", UserEmail = "Superman@cnblogs.com"},
            new Users {UserID = 2, UserName = "Spiderman", UserEmail = "Spiderman@cnblogs.com"},
            new Users {UserID = 3, UserName = "Batman", UserEmail = "Batman@cnblogs.com"}
        };

        // GET api/Users
        public IEnumerable<Users> Get()
        {
            return _userList;
        }

        // GET api/Users/5
        public Users GetUserByID(int id)
        {
            var user = _userList.FirstOrDefault(users => users.UserID == id);
            if (user == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            return user;
        }

        //GET api/Users/?username=xx
        public IEnumerable<Users> GetUserByName(string userName)
        {
            return _userList.Where(p => string.Equals(p.UserName, userName, StringComparison.OrdinalIgnoreCase));
        }
    }
}

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

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

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

咱們再換FireFox請求,發現Content-Type仍是xml類型。3d

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

打開保存後的文件,咱們發現請求到的數據是JSON格式。

形成這樣的差別的緣由是:不一樣的瀏覽器發送的Request Header裏面的Content-Type不一致形成的。

咱們能夠使用Fiddler驗證一下。

Content-Type:text/json

Content-Type:text/xml

POST數據

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

//POST api/Users/Users Entity Json
public Users Add([FromBody]Users users)
{
    if (users == null)
    {
        throw new HttpRequestException();
    }
    _userList.Add(users);
    return users;
}

咱們仍是使用Fiddler進行模擬POST數據。

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

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

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

下面使用Fiddler進行模擬POST。

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

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

點擊Execute後,跳到了咱們前面設置的斷點處,咱們看看提交過來的數據。

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

結語

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

第二部分咱們將一塊兒看一看Web API裏面的一些安全驗證的問題。

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

 DEMO源碼下載

相關文章
相關標籤/搜索