post请求,body传值支持text/plain
今天写了一个接口,需要接收body中的纯文本,但是纯文本不能是json类型,需要是支持text/plain类型的,所以就去搜了一下,后面才知道,需要重新写一个方法。
第一种方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 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<InputFormatterResult> 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(); } } |
第二种方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | public sealed class PlainTextInputFormatter : TextInputFormatter { public override async Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding) { string content; using ( var reader = context.ReaderFactory(context.HttpContext.Request.Body, encoding)) { content = await reader.ReadToEndAsync(); } // 最后一步别忘了 return await InputFormatterResult.SuccessAsync(content); } }<br><br><br> public sealed class CustInputFormatter : InputFormatter { public CustInputFormatter() { SupportedMediaTypes.Add( "text/plain" ); } protected override bool CanReadType(Type type) { return (type == typeof (DateTime)) || (type == typeof ( int )); } public override async Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context) { string val; using ( var reader = context.ReaderFactory(context.HttpContext.Request.Body, Encoding.UTF8)) { val = await reader.ReadToEndAsync(); } InputFormatterResult result = null ; if (context.ModelType == typeof (DateTime)) { result = InputFormatterResult.Success(DateTime.Parse(val)); } else { result = InputFormatterResult.Success( int .Parse(val)); } return result; } } |
以上参考:https://www.cnblogs.com/tcjiaan/p/9567371.html 原文更精彩
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了