c# - Webapi以特定格式发送查询字符串数组
问题描述
谁能告诉我是否有一种内置方法可以将输出格式化为以下格式?我以前没有遇到过这个。我可以写一个格式化程序,但如果我不需要,那是一个加号。
删除/批量?apiKey=8ea7c969eff8ab3819b9090d225c8625a0d2668d&listCrmId[0]=30871295&listCrmId 1 =30871296
我的实体如下
public class BulkDelete
{
[JsonProperty(PropertyName = "apiKey")]
public string ApiKey { get; set; }
[JsonProperty(PropertyName = "listCrmId")]
public int[] ListCrmId { get; set; }
}
发布我的解决方案,以便其他人可以使用。我发现没有解决方案可以按 name[postion]=value 输出数组集合,所以我从这里修改了另一个扩展方法。
public static string GetQueryStringFromArray(this object obj)
{
var result = new List<string>();
var props = obj.GetType().GetProperties().Where(p => p.GetValue(obj, null) != null);
foreach (var p in props)
{
var value = p.GetValue(obj, null);
switch (value)
{
case ICollection enumerable when p.PropertyType.IsArray:
var sd = enumerable.Cast<object>();
for (int i = 0; i < sd.Count(); i++)
{
result.Add($"{p.Name}[{i}]={HttpUtility.UrlEncode(sd.ElementAt(i).ToString())}");
}
break;
case ICollection enumerable:
result.AddRange(enumerable.Cast<object>().Select(v => $"{p.Name}={HttpUtility.UrlEncode(v.ToString())}"));
break;
default:
result.Add($"{p.Name}={HttpUtility.UrlEncode(value.ToString())}");
break;
}
}
return string.Join("&", result.ToArray());
}
Output returns ApiKey=a415ae8151957de117869389aa3e30c068b7eaa5&ListCrmId[0]=123450&ListCrmId 1 =123451&ListCrmId[2]=123452&ListCrmId[3]=123453&ListCrmId[4]=123454&ListCrmId[5]=123455&ListCrmId[6]=123456&ListCrmId[7]=123457&ListCrmId[8]=123458&ListCrmId[9 ]=123459&ListCrmId[10]=1234510&ListCrmId[11]=1234511&ListCrmId[12]=1234512&ListCrmId[13]=1234513&ListCrmId[14]=1234514&ListCrmId[15]=1234515&ListCrmId[16]=1234516&ListCrmId[17]=1234517&ListCrmId[18]=1234518&ListCrmId[19 ]=1234519
谢谢@约翰
解决方案
推荐阅读
- reporting-services - Power BI 报表服务器连接字符串问题
- flutter - 如何将用户挑选的视频上传到firebase?
- html - 居中按钮使用整行
- performance - Tensorflow - Keras,在 GPU 上的训练比在 CPU 上慢得多
- r - 按特定类别在 R 中的年复一年
- python - AWS CLOUD9:如何自动执行每天运行的任务?
- wordpress - 从 API 响应更新 wp_postmeta 中的 meta_value
- node.js - 使用 grpc 安全通道时收到错误代码 2 的 RST_STREAM
- flutter - 如何在颤动中使用带有 bloc 的无限负载?
- r - R:按名称排除列时出现问题