zoukankan      html  css  js  c++  java
  • post请求,body传值支持text/plain

    今天写了一个接口,需要接收body中的纯文本,但是纯文本不能是json类型,需要是支持text/plain类型的,所以就去搜了一下,后面才知道,需要重新写一个方法。

    第一种方法:

     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();
            }
        }
    

      第二种方法:

    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);
            }
        }


    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 原文更精彩

  • 相关阅读:
    晕,又要学新东西了!
    十一之旅(1)
    结束放假◎!
    容颜总有一天会慢慢老去
    JS里在光标位置插入字符
    放假啦,暂别七天
    好久没来,小小的Happy一下
    唉唉唉
    关于Timer使用,为什么程序会死掉
    于Excel文件上传读取数据的问题
  • 原文地址:https://www.cnblogs.com/fanlin92/p/13409938.html
Copyright © 2011-2022 走看看