ASP.NET Web API 配置返回的json字段的格式以及Action返回HttpResponseMessage類型和IHttpActionResult類型


注:本文為個人學習摘錄,原文地址:http://www.cnblogs.com/yxlblogs/p/3657602.html

 

1. 對於返回的Json對象格式是以“帕斯卡”風格的(例如“FirstName”),然而我們的Api有很大的可能被帶有Javascript的客戶端消費,對於JS開發者來說可能更適合“駝峰”風格(例如”firstName”)的數據。解決方案:配置Json格式。

Web Api提供Xml和JSON作為返回數據的格式,框架會自動把這些格式注入管線。客戶端可以通過Http請求頭部來聲明需要的數據格式,我們可以通過在“WebApiConfig”這個類來配置JSON數據的格式:

復制代碼
 public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            var json = config.Formatters.JsonFormatter;
            // 解決json序列化時的循環引用問題
            json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
            // 干掉XML序列化器
            config.Formatters.Remove(config.Formatters.XmlFormatter);

            var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
            jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();


            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new {id = RouteParameter.Optional}
                );


        }
    }
復制代碼

首先根據HttpConfiguration對象獲得jsonFormatter對象,然后設置ContractResolver屬性。那么以后當我們使用JSON數據格式的時候就是“Camel”風格的了。

 

2. 對於返回單個資源,我們應當返回相應的狀態碼(例如:成功200,資源未找到404等),解決方案:HttpResponseMessage對象

Web Api框架中有一個”HttpResponseMessage“類可以用來返回Http狀態碼。有的時候使用狀態碼代替model來響應給客戶端會更好

復制代碼
 public HttpResponseMessage GetCourse(int id)
        {
            try
            {
                var course = TheRepository.GetCourse(id);
                if (course != null)
                {
                    return Request.CreateResponse(HttpStatusCode.OK, TheModelFactory.Create(course));
                }
                else
                {
                    return Request.CreateResponse(HttpStatusCode.NotFound);
                }
 
            }
            catch (Exception ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
            }
        }
復制代碼

 3.返回IHttpActionResult

IHttpActionResult是Web API 2中引入的一個接口,它的定義如下:

 public interface IHttpActionResult
    {
        Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken);
    }

 

從它的定義可以看出,IHttpActionResult是HttpResponseMessage的一個工廠類,最終還是用於構建HttpResponseMessage返回,由於它可以取消,因而可以實現更為強大的返回功能(如流傳輸)。當服務函數返回IHttpActionResult對象時,服務器執行該對象的ExecuteAsync函數,並異步等待至函數完成后,獲取其返回值HttpResponseMessage輸出給客戶端。

IHttpActionResult是WebAPI中推薦的標准返回值,ApiController類中也提供了不少標准的工廠函數方便我們快速構建它們,如BadRequest,Conflict,Ok,NotFound等,一個簡單的示例如下:

復制代碼
 public IHttpActionResult Get(int id)
    {
        var product = products.FirstOrDefault((p) => p.Id == id);
        if (product == null)
        {
            return NotFound();
        }
        return Ok(product);
    }
復制代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM