Web api接口返回值類型詳解
Web api的接口返回值主要有四中類型
- Void無返回值
- IHttpActionResult
- HttpResponseMessage
- 自定義類型
一、 Void 返回值
方法是使用void申明的方法,在success方法里面得不到返回值,並且會返回http狀態碼204,告訴客戶端此請求沒有返回值。
二 IHttpActionResult
IHttpActionResult類型是WebApi里面比較重要的一種返回值類型。
1. Json<T>(T content)
在MVC中請求數據的接口返回值類型大部分使用的是JsonResult,
在webapi中我們定義的返回值類型是IHttpActionResult類型,直接返回Json<T>(T content)
我們將Json 轉到定義看看:protected internal JsonResult<T> Json<T>(T content);
繼續將JsonResult<T>轉到定義: public class JsonResult<T>:IHttpAciontResult
原來JsonResult<T>是實現了IHttpActionResult接口的
實體類可以直接傳遞
[HttpPost]
public IHttpActionResult GetStudent(List<Student> stu) {
List<Student> studentList = stu;
//return stu[0].Name;
return Json<List<Student>>(studentList);
}
匿名類型,我們很多時候返回前端的對象都沒有對應的實體來對應,我們要返回就在Json<T><T content>必須要傳一個對應的泛型類型。如果是匿名類型這里肯定不好傳。還好有我們的object類型,可以通過dynamic
2. Ok()、Ok<T><T content>
除了Json<T>(T content),在ApiController里面還有另一個比較常用的方法:Ok().
如果返回Ok(),就表示不同客戶端返回任何信息,只告訴客戶端請求成功。
除了Ok()之外,還有另一個重載Ok<T>(T Content)
這種用法和Json<T>(T content)比較類似,如果你非要問這兩者有什么區別,或者說怎么選擇兩者。那么我的理解是如果是返回實體或者實體集合,建議使用Json<T>(T content),如果是返回基礎類型(如int、string等),使用Ok<T>(T content)。
3.NotFound()
當需要向客戶端返回找不到記錄時,有時需要NotFound()方法
NotFound()方法會返回一個404的錯誤到客戶端。
4、其他
Content<T>(HttpStatusCode statusCode, T value)
向客戶端返回值和http狀態碼。
BadRequest()
向客戶端返回400的http錯誤。
Redirect(string location)
將請求重定向到其他地方。
三、HttpResponseMessage
在上文自定義IHttpActionResult返回類型的時候,提到過HttpResponseMessage這個對象。它表示向客戶端返回一個http響應的消息對象(包含http狀態碼和需要返回客戶端消息)。獨特的使用場景:需要向客戶端返回HttpResponse時就要用到這個對象。已導出為例子,將導出的excel文件輸出到客戶端瀏覽器,webapi的服務端需要向web的客戶端輸出文件流,這個時候一般的IhttpActionResult對象不方便解決這個問題,於是HttpReponseMessage派上了用場。