公司的很多項目前期一直是用的WebForms。但是因為業務的發展,公司要在原有的項目上接入移動端,webservice有點老舊了,現在比較流行RESTFul,於是乎就想到了WebAPI。
一、如果是建立項目最簡單,檔案=>建立=>項目=>Web=> ASP.NET Web 應用程式,在下方同時勾選Web Forms 和 Web API 核心引用即可,webfroms核心和WebAPI核心的應用程式就建立好了。
二、如果是原有的項目上增加WebAPI,只要將相關的包引用即可。
1.這裡先建立WebForms 應用程式
2.Webfroms項目建立完成後,需要用到VS的NuGet包管理器。右擊引用,選擇 管理NuGet程式包。
選擇 瀏覽,搜尋WebAPI,選擇第一個Microsoft.AspNet.WebApi;點擊右邊的安裝後點擊確定,後選擇我接受,等到輸出顯示成功,則安裝完成。
3.右擊Web項目,添加名為App_Start的檔案夾,在App_Start檔案夾下建立名為WebApiConfig的cs檔案。
清理命名空間,將類更改為static類型,添加必要代碼,缺少引用的自行引用。
完整代碼如下:
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Http;namespace WebFormsDemo{public static class WebApiConfig {public static void Register(HttpConfiguration config) {// Web API 配置和服務// Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }}
4.需要在Global.asax檔案下的Application_Start方法中註冊一下WebAPI,這裡需要引用System.Web.Http;完整代碼如下:
protected void Application_Start(object sender, EventArgs e){// 在應用程式啟動時啟動並執行代碼 GlobalConfiguration.Configure(WebApiConfig.Register);}
5.接下來讓我們來測試一下,建立一個Controller
6.瀏覽器訪問http://localhost:27650/api/values/get?id=1,測試通過。
三、使用OWIN來作為宿主啟動Webapi
上述是使用Global方式啟動WebAPI,如果項目中使用的SignalR,就必須使用OWIN來作為宿主,雖然網上有教程Global也可以啟動SignalR(在中Application_Start方法加上一句 RouteTable.Routes.MapHubs();),但是微軟早在2014年6月就對其聲明了過時,建議使用Owin Startup Class的方式啟動SignalR。()
1.廢話不多說,建立Startup類
2.直接在Configuration 方法下建立一個ConfigureWebapi方法,完整代碼如下:
/// <summary>/// 配置Webapi/// </summary>/// <param name="app"></param>public void ConfigureWebapi(IAppBuilder app) {//建立一個HTTP的執行個體配置HttpConfiguration config = new HttpConfiguration();//映射路由 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );//將配置注入OWIN管道中 app.UseWebApi(config); }
3.我們發現,有錯誤資訊IAppBuilder中未包含UseWebApi的定義,原因是缺少Self-Host寄宿支援,在封裝管理員控制台,中輸入以下指令:
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
4.安裝完成後錯誤提示消失
5.移除Global中的啟動方式,並將ConfigureWebapi方法初始化。
6.讓我們來測試一下,http://localhost:27650/api/values/get?id=1,報錯誤404.
7.原因是還缺少一個名為 Microsoft.Owin.Host.SystemWeb 的包,這個包提供了Owin服務運行ASP.NET 網路請求管道。在封裝管理員控制台,中輸入以下指令:
install-package Microsoft.Owin.Host.SystemWeb
8.讓我們再來測試一下,瀏覽器中輸入http://localhost:27650/api/values/get?id=1,測試通過。
最後,值得一提的是官方的教程大多都使用隱式類型var 關鍵字,有網友說使用隱式類型的好處有
1.它有利於更好地為本地變數命名。
2. 它有利於設計更好的API。
3. 它促使對變數進行初始化。
4. 它消除了代碼的混亂。
5. 它不需要using指示符。
樓主還沒有深刻的體會和研究,不敢在這裡妄加解釋。還在學習中,下面是微軟官方的文檔,大家感受一下。
文章到這裡就結束了,其實寫如何搭建WebAPI的文章也很多,這裡僅僅是做一下記錄,以防自己忘掉,如果此文章有幸被你看到,歡迎不吝指教。