1. 程式人生 > >Web API 方法的返回類型、格式器、過濾器

Web API 方法的返回類型、格式器、過濾器

lca asc .net nbsp tin 過濾 col 數據 www

一、Action方法的返回類型

a) 操作方法的返回類型有四種:void、簡單或復雜類型、HttpResponseMessage類型、IHttpActionResult類型。

b) 如果返回類型為void,請求結束後HTTP狀態碼為204(No Content),如果返回類型為復雜類型,則對象會被轉化為Json字符串後傳輸。

c) 從圖示的Web API的大致交互過程可以看到,Controll返回的是HttpResponseMessage類型,然後轉換為HttpResponse提供給調用端。同時也可以自己手動設置在代碼中返回一個HttpResponseMessage,並設置HTTP狀態。

技術分享

技術分享

d) IHttpActionResult

WebAPI 2可以返回IHttpActionResult對象,與MVC的ActionResult類似。實現IHttpActionResult的類有:

技術分享

返回這些類型是,就不用像HttpResponseMessage那樣自己指定HTTP狀態碼了。

二、Web API Request\Response 數據格式

a) 媒體類型(又名MIME類型)指定數據的格式,例如type/subtype, text/html, text/xml, application/json, image/jpeg 等。在HTTP請求,請求中指定MIME類型的方法是是在頭部中使用Accept和Content-Type屬性。Accept頭部屬性指定客戶期望的響應數據的格式,Content-Type頭部屬性指定請求體中的數據的格式,這樣接收器可以解析它轉換成適當的格式。

三、媒體格式器

a) 媒體格式器的作用便是根據使用Accept和Content-Type屬性,來序列化請求或響應數據,以便使Web API可以理解這些數據格式。

WebAPI內置了一些媒體類型格式器:

技術分享

使用GlobalConfiguration.Configuration.Formatters可以取得MediaTypeFormatterCollection,這裏包含所有這些格式器的集合。還可以Add\Remove格式器。

b) JsonMediaTypeFormatter內部使用第三方開源庫Json.NET來執行序列化。模式按照PascalCase編寫Json屬性名,如果想使用camelCase格式,可以在WebApiConfig中配置:

另外,給Formatter集合添加BsonMediaTypeFormatter可以支持BSON(二進制的JSON)的格式化。

四、媒體過濾器

a)與MVC中的過濾器類似,提供AOP的能力,可用於日誌記錄、異常處理、性能測量、身份認證和授權等。過濾器都實現System.Web.Http.Filters.IFilter接口,可用於創建過濾器的重要接口和類有:

技術分享

b)假如要創建日誌記錄類,可以使用Action方法過濾器,有兩種方式,實現IActionFilter或者繼承ActionFilterAttribute類。

技術分享

?如果采用實現IActionFilter的方式,因為是要創建類似LogAttribute這樣的特性,還需要繼承Attribute類。然後實現IActionFilter.ExecuteActionFilterAsync方法。Trace.Wrieline默寫寫入了輸出窗口。

技術分享

如果采用繼承ActionFilterAttribute的方式,可以重寫OnActionExecuting、OnActionExecuted方法並記錄日誌。

學習資料:www.yuanjiaocheng.net (猿教程) 作者:卿文剛

Web API 方法的返回類型、格式器、過濾器