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

WebApi通用获取全量参数,不使用实体

protected async Task<JObject> GetReqParamToJsonAsync()
{
Request.EnableBuffering();
var request = Request;
// 获取 URL 参数
var urlParameters = this.GetUrlParameters(request.Query);
//var urlParameters = request.Query.ToDictionary(x => x.Key, x => GetQueryParameterValue(x.Value));
// 获取请求体参数(JSON 格式)
var requestBody = await this.ReadRequestBodyAsync(request.Body);
var requestBodyJson = !string.IsNullOrEmpty(requestBody) && !request.HasFormContentType ? JObject.Parse(requestBody) : new JObject();
// 获取表单参数
var formParameters = request.HasFormContentType ? GetFormParameters(request.Form) : new Dictionary<string, JToken>();
// 合并所有参数
var allParameters = new JObject();
allParameters.Merge(JObject.FromObject(urlParameters));
allParameters.Merge(requestBodyJson);
allParameters.Merge(JObject.FromObject(formParameters));
return allParameters;
}

private Dictionary<string, JToken> GetUrlParameters(IQueryCollection formCollection)
{
var parameters = new Dictionary<string, JToken>();
foreach (var keyValuePair in formCollection)
{
if (keyValuePair.Value.Count > 1)
{
parameters[keyValuePair.Key] = JToken.Parse(JsonConvert.SerializeObject(keyValuePair.Value));
}
else
{
parameters[keyValuePair.Key] = JToken.FromObject(keyValuePair.Value.FirstOrDefault());
}
}
return parameters;
}

private async Task<string> ReadRequestBodyAsync(Stream body)
{
using var reader = new StreamReader(body, Encoding.UTF8, true, 1024, true);
return await reader.ReadToEndAsync();
}

private Dictionary<string, JToken> GetFormParameters(IFormCollection formCollection)
{
var parameters = new Dictionary<string, JToken>();
foreach (var keyValuePair in formCollection)
{
if (keyValuePair.Value.Count > 1)
{
parameters[keyValuePair.Key] = JToken.Parse(JsonConvert.SerializeObject(keyValuePair.Value));
}
else
{
parameters[keyValuePair.Key] = JToken.FromObject(keyValuePair.Value.FirstOrDefault());
}
}
return parameters;
}

http://www.gsyq.cn/news/1625.html

相关文章:

  • 《【插件】2025版PS插件一键安装》
  • Nginx跨越设置
  • 【GitHub每日速递】别再瞎买编程课了!这 2 个免费宝藏,从入门到职业规划全搞定
  • 我们一起“扒一扒”ReentrantLock:看看锁背后那些精妙的设计
  • 医学如果不追求深入的话,其实门槛没有特别高
  • 从0到1:餐饮微信点餐小程序源码解析(含扫码点餐+外卖系统+后台管理)
  • part 2
  • Apache服务器自动化运维与安全加固脚本详解
  • 无障碍资源导航
  • 还在微信群追问任务进展?领歌看板让逾期工作无处可藏
  • PostgreSQL 内机器学习的关键智能算法研究
  • 神器内存分配器(Allocator)设计:从原理到高性能实现的深度探索
  • Symfony学习笔记 - Symfony Documentation - Frontend
  • xtrabackup8.0本地备份和恢复(xbstream+compress)
  • Docker
  • Gitee DevOps:打造中国开发者专属的全流程效能引擎
  • java将指定的两张图片合成pdf并在指定坐标位置写入内容
  • 国产化Excel处理组件Spire.XLS教程:C# 读取 CSV 文件,从基础读取到 DataTable 转换
  • 常用redis客户端对比
  • 【URP】Shader绘制棋盘格对比内置管线
  • Codeforces Round 1049 (Div. 2)(C-E)
  • 智能引擎驱动软件工业化革命:Gitee PPM如何重塑企业级开发范式
  • HCIP回顾— BGP基础
  • 鸿蒙 HAP 包处理全攻略:从解包到签名,So 库加固一步到位
  • 关于vue在PC端,rem对不同屏幕进行适配
  • GreatSQL分页查询优化案例实战
  • 技术面:Java并发(线程同步、死锁、多线程编排)
  • mac一键关闭chrome自动更新
  • 政务预约系统介绍
  • 猜灯谜赢大奖系统介绍