【WebAPI No.1】建立簡單的 .NETCore WebApi
介紹:
官方定義如下,強調兩個關鍵點,即可以對接各種客戶端(瀏覽器,移動裝置),構建http服務的框架。Web API最重要的是可以構建面向各種客戶端的服務。
core的WebAPI與ASP.NET WebAPI是有些區別的,現在使用的是控制器路由[Route("api/Menu")]和請求方式路由[HttpGet]、[HttpGet("{id}")]結合的 方式。直接在控制器和Action上使用方法註釋。沒有ASP.NET WebAPI存在單獨的配置路由規則類。先配置,然後進行註冊後才可以使用。
Web API的主要功能:
1. 支援基於Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, update, delete)操作
通過不同的http動作表達不同的含義,這樣就不需要暴露多個API來支援這些基本操作。
2. 請求的回覆通過Http Status Code表達不同含義,並且客戶端可以通過Accept header來與伺服器協商格式,例如你希望伺服器返回JSON格式還是XML格式。
3. 請求的回覆格式支援 JSON,XML,並且可以擴充套件新增其他格式。
4. 原生支援OData。
5. 支援Self-host或者IIS host。
建立專案:
首先:開啟vs選中新建專案- >選中.NET Core - >ASP.NET Core Web應用程式:
然後:在選擇web應用程式,注意上面要選中.net Core 別選錯了。在選擇Web API
最後:看到一個新建好的專案結構:
驗證:最後開啟基礎網址看一下效果:
再修改網址路徑:http://localhost:4833/api/values
基本介紹:
建立自己新的控制器:
路由的基本功能:
控制器路由:
[Route("api/Menu")]
Action路由:
1.根據HttpMethod路由 [HttpPut]
2.根據Template模板路由[HttpGet("{id}")]
Core WebAPI中返回資料處理,提供了更 多的選擇:
1.OKResult,OkObjectResult,返回狀態為200
注:用OkObjectResult 前臺jquery自動解析為object物件,不需要進行反序列化處理
2.ContentResult 返回字串
3.JsonResult 返回Json物件,前臺不需要反序列化處理
4.返回基礎型別和引用型別 ,自動序列化,前臺接收為object物件等
請求的一點補充:
get請求引數如果在路由中配置就不能使用?拼接直接使用/值形式;例如:
錯誤寫法:http://localhost:4833/api/Test?id=5
正確寫法:http://localhost:4833/api/Test/5
跨域處理:
Core WebAPI的專案中自帶了跨域Cors的處理,不需要單獨新增程式包。我們只需要在全域性配置處配置就可以了。
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddCors(options => { options.AddPolicy("any", builder => { builder.AllowAnyOrigin() //允許任何來源的主機訪問 .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials();//指定處理cookie }); }); }View Code
首先要引用名稱空間:
using Microsoft.AspNetCore.Cors;
然後在使用的Action上面增加:[EnableCors("any")]
[HttpGet("{id}")] [EnableCors("any")] public string Get(int id) { return "這是帶"+id+"的返回值"; }
注:也可以在控制器上使用,這樣當前控制器所有方法都支援跨域
Cookie的訪問:
後臺通過HttpContext上下文可以直接操作Cookie :ControllerContext.HttpContext.Response.Cookies.Append("name", "內容");
前臺JQuery的ajax請求,需要攜帶withCredentials才會將cookie的值儲存到客戶端