zoukankan      html  css  js  c++  java
  • ASP.NET Web API 配置返回的json字段的格式以及Action返回HttpResponseMessage类型和IHttpActionResult类型

    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);
        }
  • 相关阅读:
    const char * 和 std::string.c_str()是个危险的东西!
    原先360商店有msnlite这个软件,后来估计因为被小米收购的原因下架了
    C++ Notes: Table of Contents
    强烈推荐:C++ manpages C++函数查询文档_Dasm_百度空间
    爱上MVC3~实体级标准验证
    Js+MVC~公用API的设计,返回jsonp后使ajax的error属性生效!
    爱上MVC3系列~PartialView()与View()真的一样吗?
    Js~对Boxy弹出框进行封装,提供弹出后自动隐藏与自动跳转功能
    爱上MVC3系列~手动向路由表扔数据,不影响当前URL路由配对
    c# webservice生成客户端及使用时碰到decimal类型时的特殊处理
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/3657602.html
Copyright © 2011-2022 走看看