.net core web api 获取request body的纯文本
本文代码
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的纯文本的更多相关文章
- ASP.NET Core Web APi获取原始请求内容
前言 我们讲过ASP.NET Core Web APi路由绑定,本节我们来讲讲如何获取客户端请求过来的内容. ASP.NET Core Web APi捕获Request.Body内容 [HttpPos ...
- 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)
对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ...
- 在ASP.NET Core Web API中为RESTful服务增加对HAL的支持
HAL(Hypertext Application Language,超文本应用语言)是一种RESTful API的数据格式风格,为RESTful API的设计提供了接口规范,同时也降低了客户端与服务 ...
- ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现
很长一段时间以来,我都在思考如何在ASP.NET Core的框架下,实现一套完整的事件驱动型架构.这个问题看上去有点大,其实主要目标是为了实现一个基于ASP.NET Core的微服务,它能够非常简单地 ...
- ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理
在上文中,我介绍了事件驱动型架构的一种简单的实现,并演示了一个完整的事件派发.订阅和处理的流程.这种实现太简单了,百十行代码就展示了一个基本工作原理.然而,要将这样的解决方案运用到实际生产环境,还有很 ...
- 通过jQuery和C#分别实现对.NET Core Web Api的访问以及文件上传
准备工作: 建立.NET Core Web Api项目 新建一个用于Api请求的UserInfo类 public class UserInfo { public string name { get; ...
- .NET Core WEB API中接口参数的模型绑定的理解
在.NET Core WEB API中参数的模型绑定方式有以下表格中的几种: 微软官方文档说明地址:https://docs.microsoft.com/zh-cn/aspnet/core/web-a ...
- [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了
[译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 本文首发自:博客园 文章地址: https://www.cnblogs.com/yilezhu/p/ ...
- 循序渐进学.Net Core Web Api开发系列【15】:应用安全
系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍W ...
随机推荐
- BigBlueButton简介
BigBlueButton是一套开源的视频会议系统,特别适用于远程教育但也可以用于标准的会议.该系统 可以让多个用户登录共享他们的摄像头并同时能够通过VOIP进行交流.可以在线演示PDF和Office ...
- log4net 性能测试
1.执行事务:20260 次 写日志: 耗时11.59分 不写日志: 耗时11.55分 异步日志: 耗时12.49分 (个人电脑,.net 线程池调用线程写日志可能比主线程直 ...
- Vue前端开发规范(山东数漫江湖)
一.强制 1. 组件名为多个单词 组件名应该始终是多个单词的,根组件 App 除外. 正例: export default { name: 'TodoItem', // ... } 反例: expor ...
- 最短路之spfa系列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t ...
- Cordova入门
创建你的第一个App 因为对接要对接酷音,实现h5跨平台调用客户端的保存和分享功能,所以学了下cordova的入门. 安装Cordova CLI Cordova命令行工具作为npm包分发. 安装cor ...
- Java中通过方法创建一个http连接并请求(服务器间进行通信)
服务器间进行通信只能通过流(Stream)的方式进行,不能用方法的返回值. 1.Java代码创建一个连接并请求该连接返回的数据 doGet()方法,execute()方法中调用 package dem ...
- dump_stack 实现分析【转】
转自:http://kernel.meizu.com/2017/03/18-40-19-dump_stack.html 1 简介 说起 dump_stack() ,相信从事 Linux 内核或者驱动相 ...
- tcp 在调用connect失败后要不要重新socket
tcp 在调用connect失败后要不要重新socket http://blog.csdn.net/occupy8/article/details/48253251
- 【bzoj4373】算术天才⑨与等差数列
同之前那道由乃题,可以认为由乃题是这题的特殊情况…… 维护方法是同样的,维护区间和,区间平方和即可. 注意特判一个数(其实没有必要) #include<bits/stdc++.h> ; u ...
- AspxGridView 表中的ASPxHyperLink不导出到excel
在软件中 因为要连接到其他的页面所以类型转成了ASPxHyperLink,但是用官方的导出控件导出到excel之后,连接依旧保留着, 目的:去除导出来的连接 方法:把之前的ASPxHyperLink转 ...