当前位置: 首页 > news >正文

.net core 接口,动态接收各类型请求的参数

[HttpPost]
public async Task<IActionResult> testpost([FromForm] object info)

{
    //Postman工具测试结果:
    //FromBody,Postman的body只有=raw+json时才进的来
    //参数为空时,Body(form-data、x-www-form-urlencoded)解析到的数据也有所不同

    Dictionary<string,object> parmsVals=new Dictionary<string,object>();
    try
    {
        if (HttpContext.Request.Body != null)
        {
            Stream _stream = HttpContext.Request.Body;
            //_stream.Position = 0;
            using (StreamReader reader = new StreamReader(_stream, Encoding.UTF8))
            {
                string strv = await reader.ReadToEndAsync();
                if (!string.IsNullOrEmpty(strv) && strv.Trim().StartsWith("{") && strv.Trim().EndsWith("}"))
                {
                    parmsVals = JsonConvert.DeserializeObject<Dictionary<string, object>>(strv.Trim());
                }
                else
                {
                    parmsVals.Add("stream_str", strv);
                }
            }
        }
    }
    catch { }
 

    if (info != null && JsonConvert.SerializeObject(info).Trim()!="{}")
    {
        parmsVals.Add("info", JsonConvert.SerializeObject(info));
    }
    try
    {
        var files = Request.Form.Files;
        if (files != null && files.Count > 0)
        {

        }
    }
    catch { }
   
    
    if (HttpContext.Request.Query.Keys.ToList() != null)
    {
        List<string> lst = HttpContext.Request.Query.Keys.ToList();
        foreach (string key in lst)
        {
            if (!parmsVals.ContainsKey(key))
            {
                parmsVals.Add(key, Request.Query[key].ToString().Trim());
            }
           

        }
    }
    try
    {
      
        
        if (HttpContext.Request.Form != null)
        {
            List<string> lst = HttpContext.Request.Form.Keys.ToList();
            foreach (string key in lst)
            {
                if (!parmsVals.ContainsKey(key))
                {
                    parmsVals.Add(key, Request.Form[key].ToString().Trim());
                }
            }
        }
    }
    catch(Exception ex)
    {
        string msg = ex.Message;
    }
    

    //Values/testurl
    return Content(JsonConvert.SerializeObject(parmsVals));
}

一、Body以 from-data 传参数

二、Body以 x-www-from-urledcoded  传参数

三、Body以 raw+JSON 传参数

http://www.lryc.cn/news/475085.html

相关文章:

  • 关注!这些型号SSD有Windows蓝屏问题需要修复
  • go语言gin框架平滑关闭——思悟项目技术2
  • K8S flannel网络模式对比
  • Vue前端框架:Vue前端项目文件目录
  • git回滚到指定的提交
  • 手机怎么玩森林之子?远程玩森林之子教程
  • 深度学习之网络与计算
  • 《JVM第1课》Java 跨平台原理
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-30
  • 加强版 第五节图像处理与视频分析
  • Orleans8.2入门测试
  • 【Linux 25】网络套接字 socket 概念
  • python openai 通过Function Call 创建自动化任务
  • 设计模式之责任链的通用实践思考
  • 前端用canvas绘图并支持下载
  • 【Mac】Homebrew
  • Python笔记之线程库threading
  • go 包管理
  • Js内建对象
  • AXI接口的实现逻辑和底层原理,在FPGA中如何实现AXI接口,一篇文章足以搞明白!!!
  • 《GBDT 算法的原理推导》 11-12计算损失函数的负梯度 公式解析
  • mysql设计
  • Android 斗鱼面经
  • 【机器学习】26. 聚类评估方法
  • linux 最多能创建多少个 TCP 连接?
  • 我为何要用wordpress搭建一个自己的独立博客
  • Linux系统每日定时备份mysql数据
  • 书生大模型第一关Linux基础知识
  • 机器学习之fetch_olivetti_faces人脸识别--基于Python实现
  • 【系统设计】深入理解HTTP缓存机制:从Read-Through缓存到HTTP缓存的交互流程