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;
}