首页 > 解决方案 > 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

谢谢@约翰

标签: c#arraysasp.net-web-apic#-4.0query-string

解决方案


推荐阅读