ASP.NET Core Web API 開發-RESTful API實現

来源:http://www.cnblogs.com/wukeng/archive/2017/02/22/6430615.html
-Advertisement-
Play Games

ASP.NET Core Web API 開發-RESTful API實現 REST 介紹: 符合REST設計風格的Web API稱為RESTful API。 具象狀態傳輸(英文:Representational State Transfer,簡稱REST)是Roy Thomas Fielding博 ...


ASP.NET Core Web API 開發-RESTful API實現

REST 介紹:

符合REST設計風格的Web API稱為RESTful API。

具象狀態傳輸(英文:Representational State Transfer,簡稱REST)是Roy Thomas Fielding博士於2000年在他的博士論文 "Architectural Styles and the Design of Network-based Software Architectures" 中提出來的一種萬維網軟體架構風格。

目前在三種主流的Web服務實現方案中,因為REST模式與複雜的SOAP和XML-RPC相比更加簡潔,越來越多的web服務開始採用REST風格設計和實現。例如,Amazon.com提供接近REST風格的Web服務執行圖書查詢;雅虎提供的Web服務也是REST風格的。

符合REST設計風格的Web API稱為RESTful API。它從以下三個方面資源進行定義:

直觀簡短的資源地址:URI,比如:http://example.com/resources/。
傳輸的資源:Web服務接受與返回的互聯網媒體類型,比如:JSON,XML,YAML等。
對資源的操作:Web服務在該資源上所支持的一系列請求方法(比如:POST,GET,PUT或DELETE)。

 

PUT和DELETE方法是冪等方法。GET方法是安全方法(不會對伺服器端有修改,因此當然也是冪等的)。

不像基於SOAP的Web服務,RESTful Web服務並沒有“正式”的標準。這是因為REST是一種架構,而SOAP只是一個協議。雖然REST不是一個標準,但大部分RESTful Web服務實現會使用HTTP、URI、JSON和XML等各種標準。

實現舉例

例如,一個簡單的網路商店應用,列舉所有商品,

GET http://www.store.com/products

呈現某一件商品,

GET http://www.store.com/product/12345

下單購買,

POST http://www.store.com/order
<purchase-order>
  <item> ... </item>
</purchase-order>

 

常用的HTTP動詞有下麵五個(括弧里是對應的SQL命令)

  • GET(SELECT):從伺服器取出資源(一項或多項)。
  • POST(CREATE):在伺服器新建一個資源。
  • PUT(UPDATE):在伺服器更新資源(客戶端提供改變後的完整資源)。
  • PATCH(UPDATE):在伺服器更新資源(客戶端提供改變的屬性)。
  • DELETE(DELETE):從伺服器刪除資源。

下麵我們就來在ASP.NET Core Web API 中實現。

例子以用戶為例,對用戶的各個更改分別對應不同的HTTP 動詞。

首先我們創建一個ASP.NET Core Web API 應用。可以參考之前博文: http://www.cnblogs.com/linezero/p/5497472.html

然後我們添加EF Core,來操作資料庫。EF Core 教程:http://www.cnblogs.com/linezero/p/EntityFrameworkCore.html

首先我們來新建一個類 User.cs 

    public class User
    {
        public int Id { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
    }

 

然後添加EF Core引用及創建DataContext.cs,並做配置。

EF Core 1.0 已經發佈了,所以引用及配置都可以更新一下。

Install-Package Microsoft.EntityFrameworkCore.Sqlite

配置對應做更新

Install-Package Microsoft.EntityFrameworkCore.Tools –Pre
  "tools": {
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",

最後使用dotnet ef 命令來創建資料庫。

  dotnet ef migrations add MyFirstMigration

  dotnet ef database update

 

下麵就來正式Web API 的開發。

這裡我們添加一個Web API 控制器 UsersController 。

會預設為我們生成GET POST PUT DELETE 對應的方法。這裡我們就來具體實現。

UsersController.cs

    [Route("api/[controller]")]
    public class UsersController : Controller
    {
        private DataContext Context;
        public UsersController(DataContext _context)
        {
            Context = _context;
        }
        // GET: api/users
        [HttpGet]
        public IActionResult Get()
        {
            return Ok(Context.Users.ToList());
        }

        // GET api/users/5
        [HttpGet("{id}")]
        public IActionResult Get(int id)
        {
            var _user = Context.Users.FirstOrDefault(r => r.Id == id);
            if (_user == null)
                return NotFound();
            return Ok(_user);
        }

        // POST api/users
        [HttpPost]
        public IActionResult Post([FromBody]User user)
        {
            Context.Add(user);
            Context.SaveChanges();
            return Created($"api/users/{user.Id}",user);
        }

        // PUT api/users/5
        [HttpPut("{id}")]
        public IActionResult Put(int id, [FromBody]User user)
        {
            var _user = Context.Users.FirstOrDefault(r => r.Id == id);
            if (_user == null)
                return NotFound();
            _user.UserName = user.UserName;
            _user.Password = user.Password;
            Context.Update(_user);
            Context.SaveChanges();
            return Created($"api/users/{_user.Id}", _user);
        }

        // DELETE api/users/5
        [HttpDelete("{id}")]
        public IActionResult Delete(int id)
        {
            var _user = Context.Users.FirstOrDefault(r => r.Id == id);
            if (_user == null)
                return NotFound();
            Context.Remove(_user);
            Context.SaveChanges();
            return NoContent();
        }
    }

實現好以後,我們使用Chrome 應用 ARC 來調試。

增加-》Post:

{"Id":1,"UserName":"LineZero","PassWord":"123456"}

 http://localhost:5000/api/users

多個查詢-》Get:

 http://localhost:5000/api/users

單個查詢-》Get(int id):

 http://localhost:5000/api/users/1

修改-》Put:

{"UserName":"LineZeroASPNETCore","PassWord":"123456789"}

 http://localhost:5000/api/users/1

刪除-》Delete:

 http://localhost:5000/api/users/1

 

 

對應的Http 操作也都實現了。資料庫相關操作也在代碼里。

對於ASP.NET Core Web API REST 風格的一種代碼實現。

 

ASP.NET Core Web API 預設JSON序列化的話,會將屬性名自動轉化為小寫,這裡我們只需要一句配置即可解決。

        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc().AddJsonOptions(r=>r.SerializerSettings.ContractResolver= new Newtonsoft.Json.Serialization.DefaultContractResolver());
        }

 

本文示例代碼:https://github.com/linezero/Blog/tree/master/ASPNETCoreAPI

 

參考鏈接:

https://zh.wikipedia.org/wiki/REST

http://www.ruanyifeng.com/blog/2014/05/restful_api.html

如果你覺得本文對你有幫助,請點擊“推薦”,謝謝。

參考頁面:http://qingqingquege.cnblogs.com/p/5933752.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在《通過擴展讓ASP.NET Web API支持W3C的CORS規範》中我們通過自定義的HttpMessageHandler為ASP.NET Web API賦予了跨域資源共用的能力,具體來講,這個自定義的CorsMessageHandler的自由主要體現在如下兩個方面:其一,為簡單跨域請求的響應和繼 ...
  • 什麼是繼承? 繼承是將兩個類中相同的屬性及方法抽取出來,放到一個新的類中(父類),而這兩個子類依然擁有這些屬性和方法。抽象點的 說,每輛車子都能跑(擁有跑的方法),都有輪胎(有輪胎這個屬性)。 使用繼承編程的好處? 使用繼承編程可以大大的減少代碼冗餘,增加代碼復用。 如何使用繼承? 以第一問為例做延 ...
  • unity3d_4.0下載含安裝教程 免費:可以隨意下載或者觀看 百度下載地址(提取碼91x6) 視頻教程下載 unity3d_4.0下載含安裝教程 unity3d腳本下載含八百個實例教程打包 unity3d4.5下載含破解補丁 Unity5下載32位64位含破解補丁 免費:可以隨意下載或者觀看 百 ...
  • 新建一個項目 u3D 對中文支持不太好 儘量不要用中文 一定不要用中文 點擊創建 Create 界面創建成功 場景自帶一個主攝像機 少於200字的文章不允許發佈到首頁候選區 要200字啊 我多加一點 不知道可不可以 圖片不算怎麼辦 碼字吧 哎~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...
  • 在使用VS2013做開發的時候,當我們需要查詢一個知識點時,直接按“F1”鍵就可以打開配套的幫助文檔。如果在沒有打開VS2013的情況想查看它的幫助文檔,我們應該怎麼辦呢?我們能否在桌面創建一個可以直接打開VS2013的快捷呢? 答案肯定是可以的。需要怎麼創建這個快捷鍵?按照我們的直觀感覺肯定是,找 ...
  • ObjectQuery 類支持對 實體數據模型 (EDM) 執行 LINQ to Entities 和 Entity SQL 查詢。ObjectQuery還實現了一組查詢生成器方法,這些方法可用於按順序構造等效於 Entity SQL 的查詢命令。下麵是 ObjectQuery的查詢生成器方法以及等 ...
  • Chapter7 Advanced Concepts 第7章 高級概念 The Code First modeling functionality that you have seen so far should be enough to get you up and running with mo ...
  • 尚未整理,請稍後 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...