(四)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
但是这种方法有个弊端,是全局的,但是应该可以限定范围,暂时先不管了。
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的返回值】的更多相关文章
- ASP.NET Web API和ASP.NET Web MVC中使用Ninject
ASP.NET Web API和ASP.NET Web MVC中使用Ninject 先附上源码下载地址 一.准备工作 1.新建一个名为MvcDemo的空解决方案 2.新建一个名为MvcDemo.Web ...
- 如何在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 ...
- ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法
ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法 第一种情况,本地开发时,使用本地数据库,如下面的代码 <connectionStrings& ...
- 在ASP.NET Web Application中通过SOAP协议调用Bing搜索服务
本文介绍了如何在ASP.NET Web Application中将Bing搜索作为Web Service来使用,并通过HTTP的SOAP协议在ASP.NET Web Application中调用Bin ...
- ASP.NET Web Service中使用Session 及 Session丢失解决方法 续
原文:ASP.NET Web Service中使用Session 及 Session丢失解决方法 续 1.关于Session丢失问题的说明汇总,参考这里 2.在Web Servcie中使用Sessio ...
- Windows API中的坑
本文主页链接:Windows API中的坑 ExpandEnvironmentStrings 风险: 进程会继承其父进程的环境变量.在展开如%APPDATA%等文件夹时,有可能父进程对此环境变量进行过 ...
- ASP.NET Web网站中App_Code文件夹的作用及使用场景
原文地址:Web Site项目和ASP.NET Web Application中App_Code文件夹的作用作者:宾的宾 我现在要建一个ASP.NET的网站了,不难吧,开始动手.如下图: 这种方法建立 ...
- ASP.NET Web Application中使用链接文件
最近重构一个内部的平台系统,作为一个平台,其下有几个子系统,每个子系统有自己的网站系统.而每个网站使用的是统一的风格,统一的验证机制,反馈系统,等等.所以,为了避免几个子系统中重复出现相同的资源或文件 ...
- 如何在 ASP.Net Web Forms 中使用依赖注入
依赖注入技术就是将一个对象注入到一个需要它的对象中,同时它也是控制反转的一种实现,显而易见,这样可以实现对象之间的解耦并且更方便测试和维护,依赖注入的原则早已经指出了,应用程序的高层模块不依赖于低层模 ...
- ASP.NET Web 应用 Docker踩坑历程——续
ASP.NET Web 应用 Docker踩坑历程发表后,也开始使用Docker了,然而发布的过程比较痛苦,经常发生下图的事情: 据说是nuget包还原时发生错误 百度了半天也找不到解决的方法,而发生 ...
随机推荐
- jquery关于多个显示隐藏
今天做了一个关于多个栏目的隐藏与显示,内容为初始化显示6个栏目,点击按钮显示所有的栏目,在次点击隐藏出现的栏目 <div class="ftlt_z_navigation acer&q ...
- selenium之python源码解读-WebDriverWait
一.显示等待 所谓显示等待,是针对某一个特定的元素设置等待时间,如果在规定的时间内找到了该元素,就执行相关的操作,如果在规定的时间内没有找到该元素,在抛出异常 PS:注意显示等待和隐身等待的区别,隐身 ...
- python xlwt 设置单元格样式
使用xlwt中的Alignment来设置单元格的对齐方式,其中horz代表水平对齐方式,vert代表垂直对齐方式. VERT_TOP = 0x00 上端对齐 VERT_CENTER = 0x01 居中 ...
- 007——转载——C#将字符串转换为整型的三种方法的总结
(一)转载——C#将字符串转换为整型的三种方法的总结 在C#中,要将一个字符串或浮点数转换为整数,基本上有三种方法: (1)使用强制类型转换:(int)浮点数 (2)使用Convert.ToInt32 ...
- PowerDesigner创建表 拷贝创建表语句 SQLSERVER创建数据库 使用查询 创建表 并且添加数据
PowerDesigner创建表 : 1.双击打开PowerDesigner 2.双击打开Create model 3左键点击Model types,再点击Physical Data m ...
- 异常:ORA-01013: 用户请求取消当前的操作
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/bnmnba/article/detail ...
- bzoj 3721: PA2014 Final Bazarek 贪心
如果没有限制,直接取前 $k$ 大即可. 有限制,则只有几种可能:奇换偶,偶换奇. 维护奇数偶数的前缀最小值和后缀最大值即可. code: #include <bits/stdc++.h> ...
- 永远不会被卡的Dinic
78,79行是精髓 61,148,149行是当前弧优化 #include <cstring> #include <cstdio> #include <queue> ...
- luogu P2345 奶牛集会
二次联通门 : luogu P2345 奶牛集会 /* luogu P2345 奶牛集会 权值线段树 以坐标为下标, 坐标为值建立线段树 对奶牛按听力由小到大排序 对于要查的牛 每次第i次放入奶牛起作 ...
- syniverse是一家怎样的公司
syniverse是一家怎样的公司?(详见问题描述)? 李超 核心业务当然是国际漫游了.简单来说就是做全球各个运营商之间的hub. 打个比方说,一家运营商A做通信,它的覆盖范围肯定是有限的(比如中 ...
