ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 网络编程 >> .NET教程 >> AspNet Core控制器如何接收原始请求正文内容详解

AspNet Core控制器如何接收原始请求正文内容详解(1/4)

来源:网络整理     时间:2018-09-24     关键词:

本篇文章主要介绍了" AspNet Core控制器如何接收原始请求正文内容详解",主要涉及到方面的内容,对于.NET教程感兴趣的同学可以参考一下: 主要目标在Asp.net Core控制器中,通过自定义格式化程序来映射自定义处理控制器中的“未知”内容。本文将给大家详细介绍关于Asp.Net Core控制器接...

主要目标

在Asp.net Core控制器中,通过自定义格式化程序来映射自定义处理控制器中的“未知”内容。本文将给大家详细介绍关于Asp.Net Core控制器接收原始请求正文内容的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧

简单案例

为了演示这个问题,我们用VS2017创建一个默认的Asp.net Core Web Api项目。

 [Route("api/[controller]")]
 [ApiController]
 public class ValuesController : ControllerBase{
 [HttpGet]
 public ActionResult<string> Get() {
  return "ok";
 }

 [HttpPost]
 [Route("PostX")]
 public ActionResult<string> Post([FromBody] string value)
 {
  return value;
 }
 }

Json请求

我们从最常见的json输入请求开始。

User-Agent: Fiddler
Host: localhost:5000
Content-Type: application/json
Content-Length: 16 

请求body:

{"123456"}

通过后台调试和fiddler抓包,我们可以看到请求输入和返回。

后台调试,查看请求输入结果

fiddler查看请求header

fiddler查看返回结果

注意!!

别忘了[FromBody],有时候会忘的。
后台action接收类型为string的时候,请求body只能是字符串,不能传json对象。我演示这个例子时,被这点坑了。如果接收对象是一个类的时候,才可以传json对象。

没有JSON

虽然传输json数据是最常用的,但有时候我们需要支持普通的文本或者二进制信息。我们将Content-Type改为
text/plain

User-Agent: Fiddler
Host: localhost:5000
Content-Type:text/plain
Content-Length: 16 

请求body:

{"123456"}

悲剧的事情来,报404!


不支持text/plain

事情到此就变得稍微复杂了一些,因为asp.netcore只处理它认识的类型,如json和formdata。默认情况下,原始数据不能直接映射到控制器参数。这是个小坑,不知你踩到过没有?仔细想想,这是有道理的。MVC具有特定内容类型的映射,如果您传递的数据不符合这些内容类型,则无法转换数据,因此它假定没有匹配的端点可以处理请求。
那么怎么支持原始的请求映射呢?

支持原始正文请求

相关图片

相关文章