(四)Asp.net web api中的坑-【api的返回值】
原文:(四)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请求准确无误的进行。

posted on 2019-07-03 17:10 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/11127663.html

(四)Asp.net web api中的坑-【api的返回值】相关推荐

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

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

  2. 【ASP.NET教程-WP教程08】ASP.NET Web Pages - 文件-在ASP.NET Web Pages中处理文件和实现文件上传功能的介绍

    ASP.NET Web Pages - 文件处理与上传 在ASP.NET Web Pages开发中,文件处理和上传是常见的任务之一.文件处理涉及到多个方面,包括文件的读取.写入.复制.移动和删除等操作 ...

  3. TabHost中使用startActivityForResult无法接收返回值的解决方案

    TabHost中使用startActivityForResult无法接收返回值的解决方案 参考文章: (1)TabHost中使用startActivityForResult无法接收返回值的解决方案 ( ...

  4. python中func函数可以没有返回值吗_python让函数不返回结果的方法

    1.简单介绍print和return的区别,print仅仅是打印在控制台,而return则是将return后面的部分作为返回值:作为函数的输出,可以用变量接走,继续使用该返回值做其它事. 2.函数需要 ...

  5. php mysql返回行数_PHP中mysqli_affected_rows作用行数返回值分析

    本文实例分析了PHP中mysqli_affected_rows作用行数返回值.分享给大家供大家参考.具体分析如下: mysqli中关于update操作影响的行数可以有两种返回形式: 1. 返回匹配的行 ...

  6. 没完没了的Cookie,读懂asp.net,asp等web编程中的cookies

    在我刚学会一点asp编程时就知道cookie了,当时照着书上的代码一通输入运行后,一切OK,就这样我自以为掌握了cookie,学javascript照样是一通代码运行成功,cookie到此为止应该是山 ...

  7. asp.net Web项目中使用Log4Net进行错误日志记录

    使用log4net可以很方便地为应用添加日志功能.应用Log4net,开发者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能.同时,通过外部配置文件,用户可以不用重新编译程序就能改变 ...

  8. ASP在 Web.config 中创建数据库连接字符串

    在 Web.config 中创建数据库连接串 我们需要在网站的配置文件中增加一些行,以便 Entity Framework 知道如何连接到我们的数据库,双击Web.config 文件. 卷到文件的最后 ...

  9. 《十四》微信小程序中的常用 API之登录、获取用户信息、支付、提现、跳转小程序、网络请求、弹框、导航、数据缓存、图片、查看文档、音频、拨打电话、剪贴板、滚动、WXML

    微信小程序提供了 wx 这个全局变量,通过这个全局变量可以调用微信小程序的 API. 登录: wx.login():获取登录凭证 code.通过登录凭证 code 进而换取用户登录态信息,包括用户在当 ...

最新文章

  1. mysql2005备份_创建完整数据库备份 - SQL Server | Microsoft Docs
  2. MyBatis + MyBatis Plus + MySQL——查询语句中字段名为MySQL关键字问题解决方案
  3. 农村民间借贷一分利息,有借条受法律保护吗?
  4. HDU - 6183 Color it 2017广西邀请赛(线段树)
  5. python canny算法_Python 实现 Canny 边缘检测算法
  6. 研发管理三部曲——贰 · 研发管理应该干什么
  7. 2021-06-18 链接标签
  8. 杰理AD14N/AD15N---长按键开关机怎么实现
  9. 追赶法源程序c语言,追赶法求三对角线方程组程序设计.doc
  10. 最互联网的定制家居增长新势力,如何三招实现疫情期的逆势增长?
  11. 专访当当网张亮:深度解读分布式作业调度框架elastic-job
  12. ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon runn
  13. python控制鼠标移动
  14. pytorch Vgg网络模型
  15. 使用JS进行版本号比较方法
  16. 【神经网络务实:Deepin Linux 安装使用yolov5】
  17. uniapp-map基本使用
  18. via浏览器皮肤html,Via浏览器 v4.2.1 身材小巧功能全面
  19. Java 8 并发篇 - 冷静分析 Synchronized(上)
  20. Datawhale-数据分析-泰坦尼克-第一单元

热门文章

  1. 是男人就下100层【第五层】——2048游戏从源代码到公布市场
  2. listener.ora、sqlnet.ora、tnsnames.ora 详解
  3. PHP 常用字符串处理代码片段
  4. php true true true,php-为什么此评估为true
  5. 微擎 jssdk php文件,微擎register_jssdk分享到朋友功能无法使用的问题及解决办法
  6. 乐高机器人教室布置图片大全_全国青少年机器人技术等级考试(上海宝山站)顺利举行...
  7. python执行linux命令返回结果_Python中调用Linux命令并获取返回值
  8. mysql数据更新回退_Mysql的几个灵魂拷问(一)
  9. 更新pcb封装导入_教你如何将 AD 或 PADS 的原理图导入 Allegro 做 Layout
  10. 1命名规则 sentinel_Spring Cloud Alibaba 整合 Sentinel 流控