天天看點

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

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

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

ASP.NET Web API 配置傳回的json字段的格式以及Action傳回HttpResponseMessage類型
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}
                );


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

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

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

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

ASP.NET Web API 配置傳回的json字段的格式以及Action傳回HttpResponseMessage類型
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);
            }
        }      
ASP.NET Web API 配置傳回的json字段的格式以及Action傳回HttpResponseMessage類型

http://www.cnblogs.com/yxlblogs/p/3657602.html