zoukankan      html  css  js  c++  java
  • .net core 3.1 中间件或过滤器中读取post请求body的方法

    //Get请求 ParseQueryString  转为 NameValueCollection 
    NameValueCollection form = HttpUtility.ParseQueryString(context.HttpContext.Request.QueryString.ToString());

    string data = string.Empty;
    switch (method)
    {
    case "POST":
    request.Body.Seek(0, SeekOrigin.Begin);
    using (var reader = new StreamReader(request.Body, Encoding.UTF8))
    {
    data = reader.ReadToEnd();
    }
    break;
    case "GET":
    //第一步:取出所有get参数
    IDictionary<string, string> parameters = new Dictionary<string, string>();
    for (int f = 0; f < form.Count; f++)
    {
    string key = form.Keys[f];
    parameters.Add(key, form[key]);
    }

    // 第二步:把字典按Key的字母顺序排序
    IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(parameters);
    IEnumerator<KeyValuePair<string, string>> dem = sortedParams.GetEnumerator();

    // 第三步:把所有参数名和参数值串在一起
    StringBuilder query = new StringBuilder();
    while (dem.MoveNext())
    {
    string key = dem.Current.Key;
    string value = dem.Current.Value;
    if (!string.IsNullOrEmpty(key))
    {
    query.Append(key).Append(value);
    }
    }
    data = query.ToString();
    break;
    default:

    base.OnActionExecuting(context);
    return;
    }

    post请求 body 获取数据为空 

    解决方法  在站点启动时设置以插入中间件的方式启用EnableBuffering,以达到在全局多次读取的目的。

    在 Startup 文件  Configure 中 加入  代码如下: 进行注册

     app.Use(next => context =>
          {
                context.Request.EnableBuffering();
                return next(context);
          });


    此外,3.0中默认禁用了AllowSynchronousIO,同步读取body的方式需要ConfigureServices中配置允许同步读取IO流,否则可能会抛出异常 Synchronous operations are disallowed. Call ReadAsync or set AllowSynchronousIO to true instead.
    根据使用的托管的服务进行配置或直接使用异步读取方式。

    services.Configure<KestrelServerOptions>(x => x.AllowSynchronousIO = true)
                    .Configure<IISServerOptions>(x=>x.AllowSynchronousIO = true);

     原文:https://www.cnblogs.com/shenghuotaiai/p/12296801.html

  • 相关阅读:
    立则存
    如何在UI控件上绑定一个变量
    欢迎大家使用www.eugene.org.cn访问我的blog
    属性与字段变量的区别
    在C#中联合Excel的Com编程入门
    我和我的土匪奶奶 全集 全 下载 txt
    大菲波数
    Hat's Fibonacci
    Fibonacci 取余,直接做超时
    How Many Fibs? 字符串转换处理
  • 原文地址:https://www.cnblogs.com/johnblogs/p/14789436.html
Copyright © 2011-2022 走看看