• 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

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

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请求准确无误的进行。

(四)Asp.net web api中的坑-【api的返回值】的更多相关文章

  1. ASP.NET Web API和ASP.NET Web MVC中使用Ninject

    ASP.NET Web API和ASP.NET Web MVC中使用Ninject 先附上源码下载地址 一.准备工作 1.新建一个名为MvcDemo的空解决方案 2.新建一个名为MvcDemo.Web ...

  2. 如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites]

    如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites] 一.布局页面介绍[Abo ...

  3. ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法

    ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法 第一种情况,本地开发时,使用本地数据库,如下面的代码 <connectionStrings& ...

  4. 在ASP.NET Web Application中通过SOAP协议调用Bing搜索服务

    本文介绍了如何在ASP.NET Web Application中将Bing搜索作为Web Service来使用,并通过HTTP的SOAP协议在ASP.NET Web Application中调用Bin ...

  5. ASP.NET Web Service中使用Session 及 Session丢失解决方法 续

    原文:ASP.NET Web Service中使用Session 及 Session丢失解决方法 续 1.关于Session丢失问题的说明汇总,参考这里 2.在Web Servcie中使用Sessio ...

  6. Windows API中的坑

    本文主页链接:Windows API中的坑 ExpandEnvironmentStrings 风险: 进程会继承其父进程的环境变量.在展开如%APPDATA%等文件夹时,有可能父进程对此环境变量进行过 ...

  7. ASP.NET Web网站中App_Code文件夹的作用及使用场景

    原文地址:Web Site项目和ASP.NET Web Application中App_Code文件夹的作用作者:宾的宾 我现在要建一个ASP.NET的网站了,不难吧,开始动手.如下图: 这种方法建立 ...

  8. ASP.NET Web Application中使用链接文件

    最近重构一个内部的平台系统,作为一个平台,其下有几个子系统,每个子系统有自己的网站系统.而每个网站使用的是统一的风格,统一的验证机制,反馈系统,等等.所以,为了避免几个子系统中重复出现相同的资源或文件 ...

  9. 如何在 ASP.Net Web Forms 中使用依赖注入

    依赖注入技术就是将一个对象注入到一个需要它的对象中,同时它也是控制反转的一种实现,显而易见,这样可以实现对象之间的解耦并且更方便测试和维护,依赖注入的原则早已经指出了,应用程序的高层模块不依赖于低层模 ...

  10. ASP.NET Web 应用 Docker踩坑历程——续

    ASP.NET Web 应用 Docker踩坑历程发表后,也开始使用Docker了,然而发布的过程比较痛苦,经常发生下图的事情: 据说是nuget包还原时发生错误 百度了半天也找不到解决的方法,而发生 ...

随机推荐

  1. springcloud系列

    1.使用Spring Cloud搭建服务注册中心2.使用Spring Cloud搭建高可用服务注册中心3.Spring Cloud中服务的发现与消费4.Eureka中的核心概念5.什么是客户端负载均衡 ...

  2. Firefox 英文改中文

    小书匠kindle 在Linux上安装好Firefox后,想进设置界面个性化一下,想看看浏览历史,无奈Linux上默认的Firefox是英文设置界面的,对于我种强迫症不能忍. 刚开始还在设置界面下搜索 ...

  3. 【原创】go语言学习(十五)IO操作2

    目录 文件打开和读写 读取压缩文件 bufio原理和cat命令实现 defer详解 文件打开和读写 1. 文件是存储在外部介质上的数据集合. A. 文件分类:文本文件和二进制文件 B. 文件存取方式: ...

  4. 比Excel还简单的SQL语句查询

    大家好,我是jacky朱元禄,很高兴继续跟大家分享<MySQL数据分析实战>系列课程,前面的课程jacky分享了数据层面增删改查中的增删改,下面的课程我们要说增删改查的这个查,jacky说 ...

  5. java 对txt文件读写(已经封装好)

    读文件: public static String readTxt(String txtPath) { File file = new File(txtPath); if(file.isFile() ...

  6. python生成二维码(简易)

    首先要的配置: pillow image qrcode zxing 然后直接上代码: import PIL import qrcode # 实例化二维码生成类 qr = qrcode.QRCode( ...

  7. Layui + 微信小程序 + PC端 + GatewayWorker + 移动端即时聊天系统

  8. 【2018.07.27】(字符串/找相同)学习KMP算法小记

    虽然说原理很好理解,但是代码理解了花费我一个下午的时间,脑阔痛 该注释的地方都标记了,希望以后看到这些代码我还能好好理解吧 学习的链接地址:https://www.cnblogs.com/teble/ ...

  9. POX flow_stats2.py analysis by uestc_gremount

    该程序是POX WIKI上的程序,我只是将统计的报文修改了以下,并做了对这个程序运行流程的分析: 1.程序从launch开始运行 2.监听2个事件,如果监听到"FlowStatsReceiv ...

  10. TynSerial文件序列(还原)

    TynSerial文件序列(还原) 1)下载文件 procedure TForm1.DownFile(filename: string); // 下载文件 var url: SockString; i ...