webapi统一返回的json格式_.net webapi返回json格式 - CSDN
精华内容
参与话题
  • WebApi返回类型设置为json的三种方法

    千次阅读 2018-09-06 13:06:46
    方法一:(改配置法)  找到Global.asax文件,在Application_Start()方法中添加一句: GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 修改后: ...

    方法一:(改配置法) 


    找到Global.asax文件,在Application_Start()方法中添加一句:

    GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

    修改后:

    复制代码

    protected void Application_Start() 
    { 
        AreaRegistration.RegisterAllAreas(); 
        WebApiConfig.Register(GlobalConfiguration.Configuration); 
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
        RouteConfig.RegisterRoutes(RouteTable.Routes); 
        // 使api返回为json 
        GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 
    } 

    复制代码

    这样返回的结果就都是json类型了,但有个不好的地方,如果返回的结果是String类型,如123,返回的json就会变成"123";


    解决的方法是自定义返回类型(返回类型为HttpResponseMessage)

    复制代码

    public HttpResponseMessage PostUserName(User user) 
    { 
        String userName = user.userName; 
        HttpResponseMessage result = new HttpResponseMessage { Content = new     StringContent(userName,Encoding.GetEncoding("UTF-8"), "application/json") }; 
        return result; 
    } 

    复制代码

    方法二:(万金油法) 

    方法一中又要改配置,又要处理返回值为String类型的json,甚是麻烦,不如就不用web 
    api中的的自动序列化对象,自己序列化后再返回

    复制代码

    public HttpResponseMessage PostUser(User user) 
    { 
        JavaScriptSerializer serializer = new JavaScriptSerializer(); 
        string str = serializer.Serialize(user); 
        HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") }; 
        return result; 
    } 

    复制代码

    方法二是我比较推荐的方法,为了不在每个接口中都反复写那几句代码,所以就封装为一个方法这样使用就方便多了。

    复制代码

    public static HttpResponseMessage toJson(Object obj) 
    { 
        String str; 
        if (obj is String ||obj is Char) 
        { 
            str = obj.ToString(); 
        } 
        else 
        { 
            JavaScriptSerializer serializer = new JavaScriptSerializer(); 
            str = serializer.Serialize(obj); 
        } 
        HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") }; 
        return result; 
    }   

    复制代码

    方法三:(最麻烦的方法) 

    方法一最简单,但杀伤力太大,所有的返回的xml格式都会被毙掉,那么方法三就可以只让api接口中毙掉xml,返回json 

    先写一个处理返回的类:

    复制代码

    public class JsonContentNegotiator : IContentNegotiator 
    { 
        private readonly JsonMediaTypeFormatter _jsonFormatter; 
    
        public JsonContentNegotiator(JsonMediaTypeFormatter formatter) 
        { 
            _jsonFormatter = formatter; 
        } 
    
        public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters) 
        { 
            var result = new ContentNegotiationResult(_jsonFormatter, new  MediaTypeHeaderValue("application/json")); 
            return result; 
        } 
    } 
        

    复制代码

    找到App_Start中的WebApiConfig.cs文件,打开找到Register(HttpConfiguration config)方法 

    添加以下代码:

    var jsonFormatter = new JsonMediaTypeFormatter(); 
    config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter)); 

    添加后代码如下:

    复制代码

    public static void Register(HttpConfiguration config) 
    { 
        config.Routes.MapHttpRoute( 
            name: "DefaultApi", 
            routeTemplate: "api/{controller}/{action}/{id}", 
            defaults: new { id = RouteParameter.Optional } 
        ); 
        var jsonFormatter = new JsonMediaTypeFormatter(); 
        config.Services.Replace(typeof(IContentNegotiator), new  JsonContentNegotiator(jsonFormatter)); 
    } 
    展开全文
  • 如题如何在core中配置GlobalConfiguration.Configuration.Formatters.JsonFormatter
  • webapi统一返回JSON数据格式

    千次阅读 2017-09-27 10:29:59
    只要将此代码加入Global.asax 文档内即可实现 GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
    只要将此代码加入Global.asax 文档内即可实现
    GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
    展开全文
  • c# WebApi之接口返回类型详解

    万次阅读 2017-11-27 14:52:31
    WebApi相关文章: C# 搭建一个简单的Web API项目 ...c# WebApi之接口返回类型详解 Webapi的接口返回值主要有四种类型 void无返回值 IHttpActionResult HttpResponseMessage 自定义类型void无返回值大家都知道voi

    WebApi相关文章:

    Webapi的接口返回值主要有四种类型

    1. void无返回值
    2. IHttpActionResult
    3. HttpResponseMessage
    4. 自定义类型

      void无返回值

      大家都知道void声明的是一个无返回值的方法,声明一个api控制器方法,例如:

    public class ValuesController : ApiController
    {
        [HttpGet]
        public void Get()
        {
            int a = 1;
            int b = 2;
            int c = a + b;
            //.....................
        }
    
        }

    使用postman,测试接口:

    这里写图片描述
    可以看到,void声明的接口,在请求成功的时候得不到返回值,而且会返回http的状态码为204,表示没有返回值。

    IHttpActionResult

    IHttpActionResult是WebApi最常用的一种返回值类型,常用的方式有:Json(T content)、Ok()、 Ok(T content)、NotFound()、Content(HttpStatusCode statusCode, T value)、BadRequest()、Redirect(string location)等

    Json(T content)

    在WebApi的ApiController这个抽象类里面,为我们封装了Json(T content)这个方法,它的用法和MVC里面的JsonResult基本类似。

    [HttpGet]
    public IHttpActionResult getJson()
    {
        var list = new List<userinfo>();
        list.Add(new userinfo { Name="jeck",age=22 });
        list.Add(new userinfo { Name = "poor", age = 23 });
        return Json<List<userinfo>>(list);
    }
    
    private class userinfo{
        public string Name { get; set; }
        public int age { get; set; }
    }

    测试结果:
    这里写图片描述

    为什么可以返回 Json(T content)呢,转到Json(T content)的定义,发现它返回的是JsonResult对象
    这里写图片描述

    再转到JsonResult的定义,发现它实现了IHttpActionResult接口
    这里写图片描述

    当然也可以使用dynamic来返回一个对象

    [HttpGet]
    public IHttpActionResult getJson()
    {
        return Json<dynamic>(new { AA = "a", BB = "b" });
    }

    这里写图片描述

    Ok()、 Ok(T content)

    如果返回Ok(),就表示不向客户端返回任何信息,只告诉客户端请求成功。

    [HttpGet]
    public IHttpActionResult getJson()
    {
        return Ok();
    }

    这里写图片描述

    Ok(T content)向客户端返回一个成功的对象

    [HttpGet]
    public IHttpActionResult getJson1()
    {
        string result = "请求成功!";
        return Ok(result);
    }

    这里写图片描述

    NotFound()

    NotFound()方法会返回一个404的错误到客户端。

    [HttpGet]
    public IHttpActionResult getJson()
    {
        return NotFound();
    }

    这里写图片描述

    Content(HttpStatusCode statusCode, T value)

    向客户端返回值和http状态码。

    [HttpGet]
    public IHttpActionResult getJson()
    {
        return Content<string>(HttpStatusCode.OK, "OK");
    }

    这里写图片描述

    BadRequest()

    向客户端返回400的http错误。

    [HttpGet]
    public IHttpActionResult getJson2()
    {
        return BadRequest();
    }

    这里写图片描述

    Redirect(string location)

    将请求重定向到其他地方。

    [HttpGet]
    public IHttpActionResult getJson3()
    {
        return Redirect("http://localhost:7408/api/Values/getJson1");
    }
    [HttpGet]
    public IHttpActionResult getJson1()
    {
        string result = "请求成功!";
        return Ok(result);
    }

    这里写图片描述

    HttpResponseMessage

    HttpResponseMessage这个对象,表示向客户端返回一个http响应的消息对象(包含http状态码和需要返回客户端的消息)。这个对象也有它独特的使用场景:需要向客户端返回HttpResponse时就要用到这个对象。以导出为例,由于需要将导出的Excel文件输出到客户端浏览器,Webapi的服务端需要向Web的客户端输出文件流,这个时候一般的IHttpActionResult对象不方便解决这个问题,于是HttpReponseMessage派上了用场。

    public HttpResponseMessage Export()
    {
        //取数据
        var lstRes = OrderBLL.Export();
    
        //向Excel里面填充数据
        HSSFWorkbook workbook = new HSSFWorkbook();
        CreateAndFillSheet(workbook, lstRes);
    
        //保存到服务
        var fileName = "Excel" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
        var strPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Data\" + fileName);
        using (FileStream fs = new FileStream(strPath, FileMode.Create))
        {
            workbook.Write(fs);
            using (MemoryStream ms = new MemoryStream())
            {
                workbook.Write(ms);
            }
        }
    
        //输出到浏览器
        try
        {
            var stream = new FileStream(strPath, FileMode.Open);
            HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
            response.Content = new StreamContent(stream);
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
            response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            {
                FileName = fileName
            };
    
            return response;
        }
        catch
        {
            return new HttpResponseMessage(HttpStatusCode.NoContent);
        }
    }

    自定义类型

    你也可以将webapi的接口和普通方法一样,返回任意的类型,WebApi会自动序列化你自定义任何返回类型,然后将序列化的值写到响应正文里,状态码统一返回200。

    [HttpGet]
    public object getJson()
    {
        var list = new List<userinfo>();
        list.Add(new userinfo { Name = "work", age = 11 });
        list.Add(new userinfo { Name = "hard", age = 12 });
        return list;
    }

    这里写图片描述

    参考内容

    展开全文
  • using System.IO;.../// WebApi返回图片 /// public HttpResponseMessage GetQrCode() { var imgPath = @"D:\ITdosCom\Images\itdos.jpg"; //从图片中读取byte var imgByte = File.ReadAllBytes(imgPath);
    using System.IO;
    /// <summary>
    /// WebApi返回图片
    /// </summary>
    public HttpResponseMessage GetQrCode()
    {
        var imgPath = @"D:\ITdosCom\Images\itdos.jpg";
        //从图片中读取byte
        var imgByte = File.ReadAllBytes(imgPath);
        //从图片中读取流
        var imgStream = new MemoryStream(File.ReadAllBytes(imgPath));
        var resp = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new ByteArrayContent(imgByte)
            //或者
            //Content = new StreamContent(stream)
        };
        resp.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpg");
        return resp;
    }
    /// <summary>
    /// WebApi返回json数据
    /// </summary>
    public HttpResponseMessage GetQrCode()
    {
        var jsonStr = "{\"IsSuccess\":true,\"Data\":\"www.itdos.com\"}";
        var result = new HttpResponseMessage(HttpStatusCode.OK)
                        {
                            Content = new StringContent(jsonStr, Encoding.UTF8, "text/json")
                        };
        return result;
    }
    /// <summary>
    /// WebApi返回字符串
    /// </summary>
    public HttpResponseMessage GetQrCode()
    {
        var str = "IT大师www.itdos.com";
        var result = new HttpResponseMessage(HttpStatusCode.OK)
                        {
                            Content = new StringContent(str, Encoding.UTF8, "text/plain")
                        };
        return result;
    }

    展开全文
  • webApi里设置全局异常返回格式 今天为了设置api返回格式统一,在网上找了一推资料,各种资料参差不齐的,最后自己捣鼓,终于弄出来了,直接上代码 /// /// 消息代理处理,用来捕获这些特殊的异常信息 /// ...
  • API接口开发简述简单示例

    万次阅读 2018-01-27 11:07:43
    API(Application Programming Interface,应用程序接口)架构,已经成为目前互联网产品开发中常见的软件架构模式,并且诞生很多专门API服务的公司,如:聚合数据(https://www.juhe.cn/)、百度APIStore(http://
  • C# web api返回类型设置为json的两种方法
  • Spring boot返回JSON类型响应及Content-Type设置 一、背景 服务器软件用Spring boot开发,API调用的响应消息格式为JSON。 对端调用接口后无法解析响应。 抓包看Response的Body部分确实是正确的JSON...
  • WebAPI接口调试技巧

    千次阅读 2020-06-22 13:20:23
    1.了解WebAPI接口 接口模式:基于MVC4.0的WebAPI 承载协议:HTTP 跟踪工具:IE11 请求方式:POST 请求URL:IP:Port/Application/Controller/ActionName/Parameters 请求参数:一串由JSON对象转化而成的字符串 响应...
  • 前后端分离的项目开发前,会提前规定好数据返回格式,本文以JSON为例。 第一步,定义好JavaBean。 package com.yclouds.myhelper.web.response; import com.fasterxml.jackson.annotation.JsonIgnore; import ...
  • PHP开发API接口注意事项

    千次阅读 2016-12-30 10:25:37
    2、对于数据的输出最好用jsonjson具有相当强大的跨平台性,市场上各大主流编程语言都支持json解析,json正在逐步取代xml,成为网络数据的通用格式 3、接口安全,一定要增加接口验证。例如,客户端和服务端针对...
  • Jersey框架二:Jersey对JSON的支持

    万次阅读 2015-06-26 09:33:58
    Jersey提供3种基本方式来使用JSON格式: 一,基于POJO 二,基于JAXB 三,基于底层JSONObject/JSONArray
  • webapi json返回值null替换为空字符串

    千次阅读 2018-11-26 18:18:04
    .netcore webapi json返回值序列化null替换为空字符串 场景:数据库中部分表字段允许空值,则代码中实体类对应的字段类型为可空类型Nullable&lt;&gt;,如int?,DateTime?,null值字段序列化返回的值都为...
  • 项目开发中使用asp.net mvc 4 web api ,异常处理时遇到一个问题: 如果请求的路由不存在或http动作不匹配,框架默认返回了一个错误的son数据: {"Message": "未找到与请求 URI...
  • 开发环境:ASP.NET Core Web API 目标框架:.NET Core 2.2 权限认证:JWT Bearer 提供者:成长的小猪 Jason Song 应用场景:当前我们给微信小程序提供服务接口,接口中使用了权限认证这一块,当我使用 JWT Bearer ...
  • 我的服务器端返回JSON数据的格式统一的,封装成JSONResponse这个类,其中data字段类型 为BaseModel,这是所有实体类的基类,但如果要返回一个对象的List而不是单个对象, 这种方式就不行了,请问如果还用一个字段...
  • 后台实战——格式统一Json返回
  • WEB API 各Content-Type对接方式

    千次阅读 2018-10-18 10:25:53
    ASP.NET Web API的内容协商(Content Negotiation)机制的理想情况是这样的:客户端在请求头的Accept字段中指定什么样的MIME类型(响应头的中Content-Type),Web API服务端就返回对应的MIME类型的内容。 而现实情况...
  • Web API系列(三)统一异常处理

    千次阅读 2018-08-17 17:00:03
    作为内部或者是对外提供的统一webapi 接口,统一的异常处理,把正确的信息返回给调用者很重要。这样可以让接口开发人员,了解具体的原因所在,这样可以得到有效的错误处理。  需要注意的是,webapi异常的状态码,...
1 2 3 4 5 ... 20
收藏数 30,947
精华内容 12,378
关键字:

webapi统一返回的json格式