【翻譯】ASP.NET Web API入門

来源:http://www.cnblogs.com/wuqian1/archive/2017/02/24/6440063.html
-Advertisement-
Play Games

簡介 ASP.NET Web API是一個可以簡化創建HTTP服務的框架 它支持包括瀏覽器和移動設備在內的各種客戶端 ASP.NET Web API是在.NET Framework上創建RESTful應用程式的理想平臺 譯者註:關於RESTful web服務可以參見這裡:http://zh.wiki ...


簡介

ASP.NET Web API是一個可以簡化創建HTTP服務的框架

它支持包括瀏覽器和移動設備在內的各種客戶端

ASP.NET Web API是在.NET Framework上創建RESTful應用程式的理想平臺

譯者註:關於RESTful web服務可以參見這裡:http://zh.wikipedia.org/wiki/REST

準備

ASP.NET MVC 4包括ASP.NET Web API,請在這裡安裝:http://www.asp.net/web-api

使用Visual Studio 2010或者Visual Studio 2012都可以開發

關於ASP.NET Web API的特性請看這裡:http://www.asp.net/whitepapers/mvc4-release-notes#_Toc317096197

簡介

HTTP並不是單單為web pages服務的

它還是一個創建網路API的強大平臺

這些API提供網路服務並可以交互數據。

HTTP協議簡單、靈活最重要的是它無處不在

差不多你能想到的所有的平臺都支持HTTP協議

所以通過HTTP協議可以相容大部分客戶端

包括瀏覽器、移動客戶端和桌面應用

ASP.NET Web API是一個在.NET Framework上創建web API的類庫

在這篇文章中,

你將看到如何使用ASP.NET Web API創建一個web api,

並且讓這個api返回一個產品列表的數據

新建項目

如下圖所示:

image

image

創建模型

模型是一個用來展現數據的對象

ASP.NET WEB API可以自動序列化模型對象

為JSON、XML、或者其他的數據格式

然後把序列化後的數據寫入HTTP的Response消息內

客戶端可以讀取這些序列化後的數據

並把這些數據反序列化成一個對象

大多數客戶端可以解析XML,JSON數據

並且可以根據消息的header來決定使用什麼格式化數據的方式

image

創建一個名為Product的模型類

代碼如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace HelloWebAPI.Models
{
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Category { get; set; }
        public decimal Price { get; set; } 
    }
}
 

創建控制器

如果你使用過ASP.NET MVC

你會發現ASP.NET WEB API的控制器

與ASP.NET MVC的控制器基本相同

最大的不同就是

ASP.NET WEB API的控制器繼承自ApiController

ASP.NET MVC的控制器繼承自Controller

WEB API的控制器並不返回View,而是直接返回數據。

image

image

並不一定要把所創建的控制器類文件放在Controller文件夾中

創建的文件,修改之後代碼如下

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

namespace HelloWebAPI.Controllers
{
    public class ProductsController : ApiController
    {
        Product[] products = new Product[]  
        {  
            new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1.39M },  
            new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M },  
            new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M }  
        };

        public IEnumerable<Product> GetAllProducts()
        {
            return products;
        }

        public Product GetProductById(int id)
        {
            var product = products.FirstOrDefault((p) => p.Id == id);
            if (product == null)
            {
                var resp = new HttpResponseMessage(HttpStatusCode.NotFound);
                throw new HttpResponseException(resp);
            }
            return product;
        }

        public IEnumerable<Product> GetProductsByCategory(string category)
        {
            return products.Where(
                (p) => string.Equals(p.Category, category,
                    StringComparison.OrdinalIgnoreCase));
        }
    }

}
 

GetAllProducts方法返回一個Product類型的數組

GetProductById通過ID查找Product

GetProductsByCategory通過分類查找Product

至此

你可以通過如下URI訪問相應的方法

GetAllProducts:/api/products

GetProductById:/api/products/id

GetProductsByCategory:/api/products/?category=category

訪問WEB API

運行此工程,

訪問如下URL可以得到結果

http://localhost:5380/api/products

image

這裡我們看到的是XML的內容

但WEB API非常智能

可以通過客戶端的請求來確定傳輸什麼類型的數據

我們可以通過如下代碼來獲取JSON類型的數據

            $(document).ready(function () {
                // Send an AJAX request 
                $.getJSON("api/products/",
                function (data) {
                    // On success, 'data' contains a list of products. 
                    $.each(data, function (key, val) {

                        // Format the text to display. 
                        var str = val.Name + ': $' + val.Price;

                        // Add a list item for the product. 
                        $('<li/>', { html: str })
                        .appendTo($('body'));
                    });
                });
            });
 

獲取到的數據如下圖所示

image

項目源碼下載地址:

http://files.cnblogs.com/liulun/HelloWebAPI.zip

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


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

-Advertisement-
Play Games
更多相關文章
  • 在開發商城系統的時候,大家會遇到這樣的需求,商城系統里支持多種商品類型,比如衣服,手機,首飾等,每一種產品類型都有自己獨有的參數信息,比如衣服有顏色,首飾有材質等,大家可以上淘寶看一下就明白了。現在的問題是,如果我程式發佈後,要想增加一種新的商品類型怎麼辦,如果不在程式設計時考慮這個問題的話,可能每 ...
  • 1..NET Core基本介紹 a 作為一個.NET的開發者,在以前的開發中,我們開發的項目基本都是部署在windows伺服器上,但是在windows伺服器上的話某些比較流行的解決訪問量的方案基本都是先出現在linux上,而後才能遷移出現windows上,而且效率處理方面也不再一個級別。曾經讓.NE ...
  • 一. 場景介紹: 如題如何有效的,最少量的現有代碼侵入從而實現客戶端與伺服器之間的數據交換加密呢? 二. 探究: 1.需求分析 webapi服務端 有如下介面: public class ApiTestController : ApiController { // GET api/<controll ...
  • 1.瀏覽器和伺服器的交互原理 答案是套接字:Socket。至於Socket的具體用法和原理,篇幅問題不在此文中寫了,先預留位置在這,下次補上《基於多線程和套接字的簡易WebServer軟體-沒有控制項的ASP.NET》。 瀏覽器和伺服器軟體通過套接字來發送和接收對方的信息,但現在的關鍵問題是,他們發送 ...
  • 例子: 1.關鍵字 class ,這個關鍵字的用途是聲明類,是C#程式最小單元,比如上面例子中,類名叫做Program。 2.關鍵字 namespace ,這個關鍵字的用途是聲明“命名空間”。比如上面例子中,命名空間叫做MyApp1。 3.關鍵字 using ,這個關鍵字的用途是導入命名空間。比如這 ...
  • 今天沒事,就下了個vs2015 preview,前段時間園子裡面也在熱炒這些新的語法糖,這裡我們就來看看到底都會生成些什麼樣的IL? 一:自動初始化屬性 確實這個比之前的版本簡化了一下,不過你肯定很好奇,到底編譯器給我們做了哪些東西呢? 從這張圖中可以看到,在ctor中<Name>k__backin ...
  • 1. HttpClient簡單介紹 依稀還記得那個時候用WebClient,HttpWebRequest來發送一個請求,現在ASP.NET MVC4中自帶了一個類HttpClient,用於接收HttpResponseMessage和發送HttpRequestMesssage。 問題在於既然WebCl ...
  • 參考頁面:http://qingqingquege.cnblogs.com/p/5933752.html ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...