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

server/2024/11/28 11:46:38/

[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.ppmy.cn/server/137714.html

相关文章

高考相关 APP 案例分享

文章首发于https://qdgithub.com/article/2032 一、核心内容 &#xff08;一&#xff09;高考相关 APP 案例 圈友朱康分享高考相关的 APP。提到猿题库&#xff0c;其主要功能有练习册和猿辅导&#xff0c;都是收费的。猿题库出题给学生练习&#xff0c;将易错的总结起来出练习…

【传知代码】基于标签相关性的多标签学习

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;传知代码 欢迎大家点赞收藏评论&#x1f60a; 目录 论文概述论文贡献算法流程实验结果核心代码复现main.py文件multi_label_learn.py文件 使用方法导入本地数据集构建多标签学习分类模型运行模型…

Excel-多表数据查找匹配(VLOOKUP)

&#x1f496;简介 Excel的VLOOKUP函数同样可以用来查找表格中的数据。VLOOKUP&#xff08;垂直查找&#xff09;是一个非常有用的函数&#xff0c;它可以在一个表格或数据表的一列中搜索特定的值&#xff0c;并返回与之在同一行上的另一列中的值。 &#x1f4d6;环境 WPS …

造纸粉体分散机、改性包覆机、改性打散机

包覆改性机在造纸填料中的应用是近年来造纸行业技术创新的一个重要方向。通过包覆改性&#xff0c;可以改善填料的表面性质&#xff0c;提升其在纸张中的留着率和分布均匀性&#xff0c;进而增强纸张的性能&#xff0c;降低生产成本。以下是包覆改性机在造纸填料中的具体应用及…

java开发如何在单例模式下通过锁机制防止并发?

在Java开发中,单例模式是一种常用的设计模式,它确保一个类只有一个实例,并提供全局访问点。 单例模式在多线程环境下的实现尤为重要,因为不当的实现可能导致多个实例的创建,从而破坏单例的特性。 本文将深入探讨Java中单例模式的实现方式,并结合各种锁机制,分析如何有…

LinkedList 分析

LinkedList 简介 LinkedList 是一个基于双向链表实现的集合类&#xff0c;经常被拿来和 ArrayList 做比较。关于 LinkedList 和ArrayList的详细对比&#xff0c;我们 Java 集合常见面试题总结(上)有详细介绍到。 双向链表 不过&#xff0c;我们在项目中一般是不会使用到 Link…

【代码随想录Day53】图论Part05

并查集理论基础 题目链接/文章讲解&#xff1a;并查集理论基础 | 代码随想录 寻找存在的路径 题目链接/文章讲解&#xff1a;代码随想录 import java.util.*;public class Main {public static void main(String[] args) {int numberOfElements, numberOfConnections;Scann…

【制造业&船运】航拍交通设施与交通工具检测系统源码&数据集全套:改进yolo11-unireplknet

改进yolo11-DRBNCSPELAN等200全套创新点大全&#xff1a;航拍交通设施与交通工具检测系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.11.01 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示”展…