Asp。网络核心控制器怎么接收原始请求正文内容

  介绍

这篇文章给大家分享的是有关Asp。网络核心控制器怎么接收原始请求正文内容的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

<强>主要目标

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

<强>简单案例

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

,(路线(“Api/(控制器)“))   ,(ApiController)   ,public  class  ValuesController :, ControllerBase {   ,(HttpGet)   ,public  ActionResult< string>,得到(),{   return 才能“ok";   ,}      ,(HttpPost)   ,(路线(“PostX"))   ,public  ActionResult< string>, Post ([FromBody], string 价值)   ,{   return 才能;价值;   ,}   以前,}

<强> Json请求

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

用户代理:提琴手   主持人:localhost: 5000   内容类型:application/json   内容长度:16

请求身体:

{“123456“}

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

 Asp。网络核心控制器怎么接收原始请求正文内容

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

 Asp。网络核心控制器怎么接收原始请求正文内容

提琴手查看请求头

 Asp。净核心控制器怎么接收原始请求正文内容

提琴手查看返回结果

<强>注意! !

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

<强>没有json

虽然传输json数据是最常用的,但有时候我们需要支持普通的文本或者二进制信息。我们将内容类型改为
文本/平原

用户代理:,提琴手   主持人:localhost: 5000   内容类型:文本/平原   内容长度:16

请求身体:

{“123456“}

悲剧的事情来,报404 !

 Asp。网络核心控制器怎么接收原始请求正文内容”> <br/>不支持文本/平原<br/> </p> <p>事情到此就变得稍微复杂了一些,因为asp.netcore只处理它认识的类型,如json和formdata。默认情况下,原始数据不能直接映射到控制器参数。这是个小坑,不知你踩到过没有?仔细想想,这是有道理的.MVC具有特定内容类型的映射,如果您传递的数据不符合这些内容类型,则无法转换数据,因此它假定没有匹配的端点可以处理请求。<br/>那么怎么支持原始的请求映射呢? </p> <p> <强>支持原始正文请求</强> <br/> </p> <p>不幸的是,ASP.NET核心不允许您仅通过方法参数以任何有意义的方式捕获“原始”数据,无论如何,您需要对其进行一些自定义处理Request.Body以获取原始数据,然后对其进行反序列化。</p> <p>您可以捕获原始数据的请求。身体并从中直接读取原始缓冲区。</p> <p>最简单,最不易侵入,但不那么明显的方法是使用一个方法接受没有参数的POST或PUT数据,然后从请求。身体以下位置读取原始数据:</p> <p> <强>读取字符串缓冲区</强> <br/> </p> <pre类=, (HttpPost)   ,(路线(“PostText"))   ,public  async  Task

这适用于一下Http和文本

用户代理:提琴手   主持人:localhost: 5000   内容类型:文本/平原   内容长度:6

要读取二进制数据,你可以使用以下内容:

<强>读取字节缓冲区

, (HttpPost)   ,(路线(“PostBinary"))   ,public  async  Task< byte[]祝辞,PostBinary ()   ,{   using 才能;(var 小姐=,new  MemoryStream (2048))   {才能   await 才能Request.Body.CopyToAsync(女士);   return 才能;ms.ToArray (),,//, returns  base64  encoded  string  JSON 结果   ,,}   以前,}

Asp。网络核心控制器怎么接收原始请求正文内容