zoukankan      html  css  js  c++  java
  • 【WebApi】(四)Asp.net web api中的坑-【api的返回值】

    • void无返回值
    • IHttpActionResult
    • HttpResponseMessage
    • 自定义类型

    我这里并不想赘述这些返回类型,

    可以参考博文http://blog.csdn.net/leonken88/article/details/53063693

    和大神的http://www.cnblogs.com/landeanfen/p/5501487.html

    我要说我遇到的坑是,

    public HttpResponseMessage DataHandler(RequestModel model)
    {

    不管是result = JsonConvert.SerializeObject(data);

    return result,

    return json<string>(result),

    或者return Ok(result)

    别人调用我的接口都是一个json字符串格式,”{“name”:”123”}”

    }

    以我想呢,既然你能收到这种字符串,自己反序列化下就ok了嘛,最后另外那边告诉我,他们的开发语言是c++,且这个http请求都是封装好的组件,类似dll那种只能调用,他们要求返回json,必须是{“name”:”123”},无转义,无双引号

    这可难办,我试了好多种方式,每次都是返回带转义字符的json字符串,无奈多方查阅

    [HttpPost]
    public HttpResponseMessage DataHandler(RequestModel model)
    {

         string result=”{“name”:”123”}”;

         return new HttpResponseMessage { Content = new StringContent(result, System.Text.Encoding.UTF8, "text/plain") };

    }

    这就对了,为什么呢?

    原来是自己对http协议的学习不精,

    1、 服务端需要返回一段普通文本给客户端,Content-Type="text/plain"
    2 、服务端需要返回一段HTML代码给客户端 ,Content-Type="text/html"
    3 、服务端需要返回一段XML代码给客户端 ,Content-Type="text/xml"
    4 、服务端需要返回一段javascript代码给客户端,text/javascript
    5 、服务端需要返回一段json串给客户端,application/Json

    ASP.NET WebAPI是一套RESTful API开发框架。会自动序列化返回的对象成XML或JSON,其序列化后的格式取决于Request的header中的Accept。常见的有:

    • application/json
    • application/xml
    • text/json
    • text/xml(这两种已经被废弃了)

    如果不指定的话默认返回的Content-Type是:application/json; charset=utf-8

    要想http response 返回指定格式,

    方法一:放弃自动序列化,返回httpResponseMessage,再手动设置

    代码如下:

    HttpResponseMessage resp = new HttpResponseMessage();

    string result=”{“name”:”123”}”;

    resp.Content = new StringContent(result, System.Text.Encoding.UTF8, ""text/plain");

    方法二:设置httpConfiguration

    image

    但是这种方法有个弊端,是全局的,但是应该可以限定范围,暂时先不管了。

    P.S.吐槽下,IE默认是不显示JSON的,会直接下载下来,所以开发人员工具就捕获不到HTTP报文,也没法看Header。

    更多详情,请参考http://www.luckyonecn.com/blog/fix_content-type_to_Applicationjson_in_WebApi/

    【知识点】http请求,不仅仅request中的content-type需要指定,response中的content-type也需要指定,客户端需要告诉服务端,我给你的是什么样的数据,content-type,服务端处理逻辑,返回给客户端,也需要告诉客户端,我给你是什么样的数据,content-type,双方按约定好的方式,进行通讯,才能确保整个http请求准确无误的进行。


    作者:Garfield

    同步更新至个人博客:http://www.randyfield.cn/

    本文版权归作者所有,未经许可禁止转载,否则保留追究法律责任的权利,若有需要请联系287572291@qq.com

    微信公众号

    扫描下方二维码关注个人微信公众号,实时获取更多干货

    作者:Garfield
    本文版权归作者和博客园共有,未经许可禁止转载,否则保留追究法律责任的权利,若有需要请联系287572291@qq.com.
  • 相关阅读:
    MySQL Server类型的MySQL 客户端的下载、安装和使用
    Sqoop学习笔记
    Sqoop安装部署
    Hive学习笔记
    HBase构架原理
    HBase HA分布式集群搭建
    IntelliJ IDEA(Community版本)本地模式的下载、安装及其使用
    Scala本地安装
    CALayer的隐式动画和显式动画
    简易动画两种执行方式
  • 原文地址:https://www.cnblogs.com/RandyField/p/7145796.html
Copyright © 2011-2022 走看看