.Net Core WebApi控制器接收原始请求正文内容
2021-07-13 12:09
阅读:723
ASP.NET Core使用一种干净且更通用的方式来处理内容的自定义格式InputFormatter。输入格式化程序挂钩到请求处理管道,让您查看特定类型的内容以确定是否要处理它。然后,您可以阅读请求正文并对入站内容执行自己的反序列化。
InputFormatter有几个要求
- 您需要使用[FromBody]去获取
- 您必须能够查看请求并确定是否以及如何处理内容。
在这个例子中,对于“原始内容”,我想查看具有以下类型的请求:
- text/plain(文本)
- appliaction/octet-stream(byte[])
没有内容类型(string)
要创建格式化程序,你可以实现IInputFormatter或者从InputFormatter继承。
public class RawRequestBodyFormatter : IInputFormatter
{
public RawRequestBodyFormatter()
{
}
public bool CanRead(InputFormatterContext context)
{
if (context == null) throw new ArgumentNullException("argument is Null");
var contentType = context.HttpContext.Request.ContentType;
if (string.IsNullOrEmpty(contentType) || contentType == "text/plain" || contentType == "application/octet-stream")
return true;
return false;
}
public async Task ReadAsync(InputFormatterContext context)
{
var request = context.HttpContext.Request;
var contentType = context.HttpContext.Request.ContentType;
if (string.IsNullOrEmpty(contentType) || contentType.ToLower() == "text/plain")
{
using (StreamReader reader = new StreamReader(request.Body, Encoding.UTF8))
{
var content = await reader.ReadToEndAsync();
return await InputFormatterResult.SuccessAsync(content);
}
}
if (contentType == "application/octet-stream")
{
using (StreamReader reader = new StreamReader(request.Body, Encoding.UTF8))
{
using (var ms = new MemoryStream(2048))
{
await request.Body.CopyToAsync(ms);
var content = ms.ToArray();
return await InputFormatterResult.SuccessAsync(content);
}
}
}
return await InputFormatterResult.FailureAsync();
}
}
格式化程序用于CanRead()检查对内容类型的请求以支持,然后将ReadRequestBodyAsync()内容读取和反序列化为应在控制器方法的参数中返回的结果类型。
InputFormatter必须在ConfigureServices()启动代码中注册MVC :
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(o=>o.InputFormatters.Insert(0,new RawRequestBodyFormatter())).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
上一篇:windows-dos命令大全
下一篇:python 面向对象(初级)
文章来自:搜素材网的编程语言模块,转载请注明文章出处。
文章标题:.Net Core WebApi控制器接收原始请求正文内容
文章链接:http://soscw.com/index.php/essay/104634.html
文章标题:.Net Core WebApi控制器接收原始请求正文内容
文章链接:http://soscw.com/index.php/essay/104634.html
评论
亲,登录后才可以留言!