本文代码

https://github.com/wuhaibo/readPlainTextDotNetCoreWepApi

总有些时候我们希望获得Request body 的纯文本 那么怎么做呢?很简单。如下所示

        public string GetJsonString([FromBody]string content)
{
return "content: " + content ;
}

测试结果如下

request:
POST http://localhost:5000/api/values/GetJsonString HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/json
Content-Length:
Host: localhost:
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1. (java 1.5)
"test" response:
HTTP/1.1 OK
Date: Wed, Mar :: GMT
Content-Type: text/plain; charset=utf-
Server: Kestrel
Transfer-Encoding: chunked content: test

可以看到content被赋值test。 但有个问题request body的内容必须是合法的json而且request 的media type也得是json

举个例子,

request:
POST http://localhost:5000/api/values/GetJsonString HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/xml
Content-Length:
Host: localhost:
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1. (java 1.5)
test response:
HTTP/1.1 OK
Date: Wed, Mar :: GMT
Content-Type: text/plain; charset=utf-
Server: Kestrel
Transfer-Encoding: chunked content:

可以看到由于request body的内容 test 并不是个合法的xml,所以我们返回的content是空。

有个更好的方法 如下所示,这种方法不论是media type都可以获得request body 的纯文本

        public string GetJsonString3(string content)
{
var reader = new StreamReader(Request.Body);
var contentFromBody = reader.ReadToEnd();
return "content: " + content
+ " contentFromBody: " + contentFromBody;
}

测试结果

request:
POST http://localhost:5000/api/values/GetJsonString3 HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/xml
Content-Length:
Host: localhost:
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1. (java 1.5)
test response:
HTTP/1.1 OK
Date: Wed, Mar :: GMT
Content-Type: text/plain; charset=utf-
Server: Kestrel
Transfer-Encoding: chunked content: contentFromBody: test

可以看到contentFromBody中我们得到了request body的内容。 注意参数没有[FromBody]这个属性 如果加了这个属性,那么如果request body内容匹配request的media type那么Request.body的position会被置于结尾的位置。 举个例子

        public string GetJsonString2([FromBody]string content)
{ var reader = new StreamReader(Request.Body);
var contentFromBody = reader.ReadToEnd(); Request.Body.Position = ; var reader2 = new StreamReader(Request.Body);
var contentFromBody2 = reader2.ReadToEnd(); return "content: " + content
+ " contentFromBody: " + contentFromBody
+ " contentFromBody2: " + contentFromBody2;
}

测试结果

request:
POST http://localhost:5000/api/values/GetJsonString2 HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/json
Content-Length:
Host: localhost:
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1. (java 1.5)
test response:
HTTP/1.1 OK
Date: Wed, Mar :: GMT
Content-Type: text/plain; charset=utf-
Server: Kestrel
Transfer-Encoding: chunked content: contentFromBody: contentFromBody2: test

.net core web api 获取request body的纯文本的更多相关文章

  1. ASP.NET Core Web APi获取原始请求内容

    前言 我们讲过ASP.NET Core Web APi路由绑定,本节我们来讲讲如何获取客户端请求过来的内容. ASP.NET Core Web APi捕获Request.Body内容 [HttpPos ...

  2. 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)

    对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ...

  3. 在ASP.NET Core Web API中为RESTful服务增加对HAL的支持

    HAL(Hypertext Application Language,超文本应用语言)是一种RESTful API的数据格式风格,为RESTful API的设计提供了接口规范,同时也降低了客户端与服务 ...

  4. ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现

    很长一段时间以来,我都在思考如何在ASP.NET Core的框架下,实现一套完整的事件驱动型架构.这个问题看上去有点大,其实主要目标是为了实现一个基于ASP.NET Core的微服务,它能够非常简单地 ...

  5. ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理

    在上文中,我介绍了事件驱动型架构的一种简单的实现,并演示了一个完整的事件派发.订阅和处理的流程.这种实现太简单了,百十行代码就展示了一个基本工作原理.然而,要将这样的解决方案运用到实际生产环境,还有很 ...

  6. 通过jQuery和C#分别实现对.NET Core Web Api的访问以及文件上传

    准备工作: 建立.NET Core Web Api项目 新建一个用于Api请求的UserInfo类 public class UserInfo { public string name { get; ...

  7. .NET Core WEB API中接口参数的模型绑定的理解

    在.NET Core WEB API中参数的模型绑定方式有以下表格中的几种: 微软官方文档说明地址:https://docs.microsoft.com/zh-cn/aspnet/core/web-a ...

  8. [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了

    [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 本文首发自:博客园 文章地址: https://www.cnblogs.com/yilezhu/p/ ...

  9. 循序渐进学.Net Core Web Api开发系列【15】:应用安全

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍W ...

随机推荐

  1. zabbix监控ipmi

    @1.假设idrac已经启用,并且使用ipmitool能正确读取数据(本文后面详细描述如何配置) @2.第一节只涉及web配置 1.创建主机 configuration-->hosts--> ...

  2. uboot的硬件驱动

    1.uboot借用(移植)了linux驱动(1)linux驱动本身做了模块化设计.linux驱动本身和linux内核不是强耦合的,这是linux驱动可以被uboot借用(移植)的关键.(2)uboot ...

  3. 在IIS中寄存服务

    http://blog.csdn.net/songyefei/article/details/7381595 第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型 ...

  4. Android项目分包---总结-------直接使用

    注: 本文是从该文摘抄而来的.简单的说,就是阅读了该文,然后,再自己复述,复制形成该文.   1.罗列Android项目的分包规则   微盘使用分包规则   如下:     1).第一层com.sin ...

  5. px,em,rem字体单位

    1.px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的.(引自CSS2.0手册) 2.em是相对长度单位.相对于当前对象内文本的字体尺寸,em存在值继承问题. 浏览器的默认字 ...

  6. spring cloud ribbon 断路器

    @EnableDiscoveryClient @SpringBootApplication @EnableCircuitBreaker //开启断路器 public class ConsumerMov ...

  7. 火狐浏览器下点击a标签时出现虚线的解决方案

    1.兼容性问题 火狐浏览器下点击a标签时出现虚线 2.解决方案 a:focus { outline: none;}

  8. java===java基础学习(10)---对象构造

    重载 如果多个方法有相同的名字,不同的参数,便产生了重载.编译器必须挑选出具体执行哪个方法,他通过用各个方法给出的参数类I型那个与特定方法调用所使用的值类型进行匹配来挑选出相应的方法.如果编译器找不到 ...

  9. monkey测试===easyMonkey测试【推荐】

    easymonkey测试: easymonkey是基于monkey测试的一个二次开发工具.(关于monkey测试参见之前blog) easymonkey的特点就是方便,解决了很多参数命令上设置的麻烦, ...

  10. web.py输出中文字符串乱码问题的解决

    web.py中文字符串网页显示乱码的解决 #!/usr/bin/env python # encoding: utf-8 import weburls = ( '/', 'index')class i ...