当前位置: 首页 > 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.wxhsa.cn/company.asp?id=228

相关文章:

  • 《【插件】2025版PS插件一键安装》
  • Nginx跨越设置
  • 依然是dots的介绍视频
  • 【GitHub每日速递】别再瞎买编程课了!这 2 个免费宝藏,从入门到职业规划全搞定
  • 你的项目一团糟-不是你的错-是框架的锅
  • 数据结构与算法-24.2-3查找树
  • 8 将GitHub远程仓库修改为ssh
  • Symfony学习笔记 - Symfony Documentation - Utilities(1)
  • IPv4向IPv6平滑过渡综合技术方案
  • TIA博图中的常用指令:定时器、计数器和触发器
  • Vue3项目开发专题精讲【左扬精讲】—— 企业网站系统(基于 Vue3 与 TypeScript 技术栈的企业网站系统开发实战)
  • Vue3项目开发专题精讲【左扬精讲】—— 商城网站系统(基于 Vue3 与 TypeScript 技术栈的企业网站系统开发实战)
  • $\LaTeX{}$之快速编译和删除中间文件 - Invinc
  • 我们一起“扒一扒”ReentrantLock:看看锁背后那些精妙的设计
  • win10使用openssl生成证书
  • $\LaTeX{}$之minted使用 - Invinc
  • linux服务器 系统服务文件
  • Codeforces Round 1049 (Div. 2) 部分题解
  • Critical Thinking Academic Writing
  • 1.3 课前问题思考
  • 【知识管理工具分享】基于AI搭建个人法律知识库:我的PandaWiki实践心得
  • 你的中间件一团糟-是时候修复它了-️
  • 超越-env-一份成熟的应用程序配置指南
  • 告别框架臃肿-我如何在不牺牲性能的情况下重新发现简单之美
  • 像元大小(例如 1.4 m 1.4 m)具体的含义和用途
  • Codeforces Round 1049 (Div. 2) 一些 idea
  • 医学如果不追求深入的话,其实门槛没有特别高
  • Canvas 的性能卓越,用它解决一个棘手的问题!
  • CSS Box-Sizing 详解:解决移动端布局溢出问题的关键
  • Visual Studio Code 开发环境搭建(Rust)