近工作中會(huì)用到WebAPI、AngularJS2、Silverlight等,需要暫停其他的,趕快充電了…
先從Web API著手。
一 概述
a) API(ApplicationProgramming Interface)應(yīng)用程序編程接口是指一些預(yù)先定義的函數(shù),可供應(yīng)用程序與開發(fā)人員訪問,而無需了解源碼或內(nèi)部工作機(jī)制的細(xì)節(jié)。Web API則是一種可以使用HTTP協(xié)議訪問的API。但這里的Web API特指ASP.NETWeb API,另外還有一些基于其它語言或技術(shù)的實(shí)現(xiàn)。
b) Asp.NetWeb API是一個(gè)可擴(kuò)展的框架,用于構(gòu)建基于HTTP的服務(wù),這種服務(wù)可以在不同平臺(tái)上的不同應(yīng)用程序中訪問:例如web應(yīng)用、窗體應(yīng)用、移動(dòng)應(yīng)用等等。它和ASP.NET MVC有相同的工作方式,但Web Api應(yīng)用程序接收到請求后返回?cái)?shù)據(jù),而不是像MVC返回html視圖。它就像一個(gè)webservice或WCF服務(wù),但例外在于它只支持HTTP協(xié)議。
二 新建Web API項(xiàng)目
a) 創(chuàng)建帶MVC的Web API項(xiàng)目
創(chuàng)建的項(xiàng)目會(huì)在默認(rèn)MVC項(xiàng)目的基礎(chǔ)上增加兩個(gè)Web API需要的特殊文件,WebApiConfig.cs和ValuesController.cs,前者用于對(duì)Web API的配置,后者是一個(gè)示例的Web API 控制器。
b) 創(chuàng)建獨(dú)立的Web API項(xiàng)目
使用空模板創(chuàng)建Web項(xiàng)目后,手動(dòng)添加Web API相關(guān)的文件。首先需要從Nuget安裝Web API包,然后創(chuàng)建Configuration文件夾并添加Config.cs文件。
然后通過GlobalConfiguration.Configure(WebAPIConfig.Register)注冊。
最后創(chuàng)建與MVC一致的Controllers文件夾和Controller層級(jí),與MVC不同的是,這里的Controller繼承自ApiController。最后根據(jù)路由規(guī)則,請求***/api/ControllerNama/ActionName就可以。
學(xué)習(xí)資料:www.yuanjiaocheng.net (猿教程) 作者:卿文剛
ASP.NET Web API 是一種框架,用于輕松構(gòu)建可以訪問多種客戶端(包括瀏覽器和移動(dòng)設(shè)備)的 HTTP 服務(wù)。 ASP.NET Web API 是一種用于在 .NET Framework 上構(gòu)建 RESTful 應(yīng)用程序的理想平臺(tái)。
REST是英文representational state transfer(表象性狀態(tài)轉(zhuǎn)變)或者表述性狀態(tài)轉(zhuǎn)移; Rest是web服務(wù)的一種架構(gòu)風(fēng)格; 使用HTTP,URI,XML,JSON,HTML等廣泛流行的標(biāo)準(zhǔn)和協(xié)議; 輕量級(jí),跨平臺(tái),跨語言的架構(gòu)設(shè)計(jì); 它是一種設(shè)計(jì)風(fēng)格,不是一種標(biāo)準(zhǔn),是一種思想。
事務(wù)為對(duì)象,資源有統(tǒng)一,形式有多樣(xml、json等) 每個(gè)資源都有一個(gè)唯一的資源標(biāo)識(shí)符。 同一個(gè)資源具有多種表現(xiàn)形式(xml,json等)。 對(duì)資源的各種操作不會(huì)改變資源標(biāo)識(shí)符。 所有的操作都是無狀態(tài)的。 符合REST原則的架構(gòu)方式即可稱為RESTful。
####2.2 為什么會(huì)出現(xiàn)restful?
在Restful之前我們寫一個(gè)web請求,格式通常是這樣的:
Restful用法:
restful風(fēng)格其實(shí)就是根據(jù)請求的類型(get、post、put、delete)來匹配對(duì)應(yīng)的方法。
在實(shí)際開發(fā)中,http請求的方法可能是相同的(比如都是post請求),而且請求的參數(shù)也相同。這個(gè)問題就麻煩。因?yàn)樽裾誖estful風(fēng)格無法解決。大家可能想到自定義一個(gè)路由,比如增加action,可以,但是在webAPI里面是不提倡的。
首先,我們啟動(dòng)特性路由。 就可以使用特性路由。
【1】 無參數(shù)的POSt請求
和Get方式請求相同。只不過在客戶端$.get和$.post區(qū)別。同時(shí)只需要添加[httpPost]標(biāo)記特性即可。
【2】 一個(gè)參數(shù)的POST請求
和Get方式不一樣,動(dòng)作方法參數(shù)上面必須添加[FromBody]標(biāo)記,否則訪問不到!同時(shí)WebAPI請求傳遞的參數(shù),也有特定的格式。而這種格式并不是我們常見的key-value格式。WebAPI模型綁定器尋找的時(shí)候,并是按照key去查找。而且空字符串。
何在VS中創(chuàng)建基于.NET的后端應(yīng)用程序,該應(yīng)用程序使用C#語言從Web API中提取。讓我們開始吧!
為服務(wù)器后端邏輯選擇語言的問題是幾乎每個(gè)開發(fā)人員最重要的問題之一,特別是對(duì)于初學(xué)者。目前已經(jīng)有很多不同的語言:Java,.NET(C#,VD),Ruby,Python,Perl,JavaScript(Node.js),Go,C ++。
除了這些語言的語法特征外,還有許多其他問題/問題,例如擴(kuò)展的可能性,不同類型數(shù)據(jù)庫的使用,高學(xué)習(xí)曲線,容錯(cuò)要求,大量數(shù)據(jù)等等。上。
哪種語言最受歡迎?你應(yīng)該使用哪一個(gè)?也許有人會(huì)推薦PHP,它具有豐富的功能和較低的學(xué)習(xí)曲線。然而,事實(shí)仍然是現(xiàn)在最常用的語言是Java和.NET。
本教程介紹如何使用C#(ASP.NET)構(gòu)建自己的Web服務(wù)器(Web API)。重要的是要注意,要托管您的服務(wù)器,您將需要基于Windows的托管。
先決條件
我想我們可以開始了。首先,當(dāng)我們使用C#時(shí),您需要使用Microsoft Visual Studio(您可以在Microsoft官方網(wǎng)站上獲取它)。
此外,您還需要啟用IIS(Internet信息服務(wù))。在Windows中啟用它很容易:
打開Microsoft Visual Studio并創(chuàng)建一個(gè)新項(xiàng)目(文件 - >新建 - >項(xiàng)目)。選擇“已安裝”模板,選擇“Visual C#”,然后選擇“Web”。在可用模板列表中,選擇“ASP.NET Web應(yīng)用程序(.NET Framework)”。給你的項(xiàng)目命名(對(duì)于我的演示,我把“webapi”),然后單擊OK。
在下一個(gè)模態(tài)對(duì)話框中,您可以選擇任何合適的模板。讓我們選擇Web API,這樣它就會(huì)為項(xiàng)目準(zhǔn)備所有基本的初始文件。單擊確定。
完成。現(xiàn)在,您可以在解決方案資源管理器中瀏覽生成的文件夾和文件 有應(yīng)用程序配置,幫助頁面數(shù)據(jù),一些控制器,字體,CSS和JS文件。
默認(rèn)情況下,服務(wù)器使用位于App_Start / WebApiConfig.cs中的路由表。
注意routeTemplate: "api/{controller}/{id}",它解釋了API路由。
現(xiàn)在,讓我們做一個(gè)基本的例子。在本教程中,我們將為用戶準(zhǔn)備一個(gè)API,這是每個(gè)系統(tǒng)的一個(gè)非常通用的實(shí)體/對(duì)象。
該模型代表用戶,因此我們將包括各種字段,如ID,姓名,電子郵件,電話和角色。
在Solution Explorer中,右鍵單擊Models文件夾,選擇Add,然后選擇Class。然后提供一個(gè)類名:User。模型類已準(zhǔn)備就緒。
現(xiàn)在我們只添加我們決定添加的所有字段:
public class User
{
public int id { get; set; }
public string name { get; set; }
public string email { get; set; }
public string phone { get; set; }
public int role { get; set; }
}
在Web API中,控制器是處理所有HTTP請求的對(duì)象。在解決方案資源管理器中,右鍵單擊“控制器”。選擇Add,然后選擇Controller。
在給定的對(duì)話框中,選擇具有讀/寫操作的Web API 2 Controller。將控制器命名為UsersController。它將為控制器準(zhǔn)備所有適當(dāng)?shù)腃RUD操作。
在本文中,我使用虛擬用戶列表準(zhǔn)備了一個(gè)基本示例:
public class UsersController : ApiController
{
private User[] users=new User[]
{
new User { id=1, name="Haleemah Redfern", email="email1@mail.com", phone="01111111", role=1},
new User { id=2, name="Aya Bostock", email="email2@mail.com", phone="01111111", role=1},
new User { id=3, name="Sohail Perez", email="email3@mail.com", phone="01111111", role=1},
new User { id=4, name="Merryn Peck", email="email4@mail.com", phone="01111111", role=2},
new User { id=5, name="Cairon Reynolds", email="email5@mail.com", phone="01111111", role=3}
};
// GET: api/Users
[ResponseType(typeof(IEnumerable<User>))]
public IEnumerable<User> Get()
{
return users;
}
// GET: api/Users/5
public IHttpActionResult Get(int id)
{
var product=users.FirstOrDefault((p)=> p.id==id);
if (product==null)
{
return NotFound();
}
return Ok(product);
}
...
現(xiàn)在,您可以構(gòu)建解決方案(在Visual Studio中按Ctrl + Shift + B)。一旦構(gòu)建成功,您就可以運(yùn)行它。單擊F5,它將在您的瀏覽器中自動(dòng)在您的本地主機(jī)的可用端口(例如http:// localhost:61024 /)中打開。最有可能的是,您不希望它始終在Visual Studio中運(yùn)行,因此最好將其保留為服務(wù)。
在這種情況下,我們可以使用IIS(Internet信息服務(wù))將其部署到本地專用服務(wù)器。這很簡單。
首先,打開IIS,在“站點(diǎn)”下面的左側(cè) - 添加新網(wǎng)站(從右側(cè)面板或右鍵單擊“站點(diǎn)”)。請輸入以下詳細(xì)信息:站點(diǎn)名稱,“webapi.localhost.net”; 物理路徑,“C:\ projects \ webapi”(解決方案所在的位置); 綁定 - http或https; 主機(jī)名是相同的,即“webapi.localhost.net”。單擊確定。
IIS應(yīng)該在webapi.localhost.net上運(yùn)行Web API服務(wù)。
現(xiàn)在,如果您嘗試在瀏覽器中打開webapi.localhost.net,它將無法打開我們創(chuàng)建的結(jié)果。這是因?yàn)闉g覽器嘗試將此地址(webapi.localhost.net)解析為全局域。為了將此域名映射到本地服務(wù)器,我們需要修改本地主機(jī)文件。在Windows(v10)上,hosts文件存在于C:\ Windows \ system32 \ drivers \ etc文件夾中。該文件沒有自己的擴(kuò)展名,它是“主機(jī)”文件。
將其復(fù)制到另一個(gè)位置并在編輯器中打開它
您需要將以下內(nèi)容添加到此文件的末尾:
#Web API主機(jī)
127 .0.0.1 webapi.localhost.net
現(xiàn)在,您需要將修改后的文件放回C:\ Windows \ system32 \ drivers \ etc文件夾中。由于此文件夾默認(rèn)受Windows保護(hù),因此您將收到拒絕訪問警告消息。因此,您需要復(fù)制“以管理員身份”文件。
文件更新后,webapi.localhost.net應(yīng)從您的localhost(C:\ projects \ webapi)加載。
是時(shí)候測試我們?yōu)閃eb服務(wù)器創(chuàng)建的API方法了: api/users and api/users/{id}。 在瀏覽器中打開http://webapi.localhost.net/api/users。你應(yīng)該得到以下輸出:
在我們創(chuàng)建可從IDE外部訪問的外部API時(shí),我們需要從另一個(gè)頁面測試我們的API。最簡單的方法是通過開發(fā)工具欄(存在于任何現(xiàn)代瀏覽器中)。通常在按F12時(shí)會(huì)激活它。轉(zhuǎn)到“控制臺(tái)”標(biāo)簽。下面我準(zhǔn)備了兩個(gè)小例子,你可以用來測試API
如果jQuery可用,您可以使用:
$.ajax({
type: "GET",
url: 'http://webapi.localhost.net/api/users',
success: (data)=> {
console.log(data);
}
});
否則,使用本機(jī)JavaScript,您可以使用以下代碼:
var xhr=new XMLHttpRequest();
xhr.open('GET', 'https://webapi.localhost.net/api/users');
xhr.onload=function() {
console.log(xhr.response);
};
xhr.send();
您很可能會(huì)收到以下錯(cuò)誤:
對(duì)預(yù)檢請求的響應(yīng)未通過訪問控制檢查:請求的資源上不存在“Access-Control-Allow-Origin”標(biāo)頭。
原因是常規(guī)網(wǎng)頁可以使用該 XMLHttpRequest 對(duì)象從遠(yuǎn)程服務(wù)器發(fā)送和接收數(shù)據(jù),但它們受到相同原始策略的限制。擴(kuò)展不是那么有限。擴(kuò)展可以與其來源之外的遠(yuǎn)程服務(wù)器通信,只要它首先請求跨源權(quán)限即可。
跨源資源共享(CORS)是一種機(jī)制,它使用其他HTTP標(biāo)頭告訴瀏覽器讓在一個(gè)源(域)上運(yùn)行的Web應(yīng)用程序有權(quán)從不同來源的服務(wù)器訪問所選資源。
為了解決這個(gè)問題,我們需要在我們的解決方案中啟用CORS。在Visual Studio中,打開包管理控制臺(tái)(可在屏幕底部,錯(cuò)誤列表和輸出之間)。
運(yùn)行以下命令:
Install-Package Microsoft.AspNet.WebApi.Cors
這將安裝WebApi.Cors參考。然后打開“App_Start \ WebApiConfig.cs”文件。加config.EnableCors();之前config.MapHttpAttributeRoutes();
然后返回我們的UsersController.cs并[EnableCors(origins: "*", headers: "*", methods: "*")]在類定義之前添加。
最后 - 再次重建項(xiàng)目。然后嘗試再次測試API; 現(xiàn)在它應(yīng)該工作。
我希望你喜歡我們的文章,你發(fā)現(xiàn)它很有用。
*請認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。