如何在 url 中传递可变数量的参数

how to pass a variable number of parameters inside a url

你好,我正在尝试在 HttpWebRequest url 中传递可变数量的参数。到目前为止,我的方法是这样的-

public static async Task<ObservableCollection<Anime>> RequestsAnime(string accessToken, int page = 0, params string[] optionals)  // All Anime
    {
        JsonWebClient client = new JsonWebClient();

        string baseUri = "https://anilist.co/api/browse/anime?access_token=" + accessToken;
        string completeUri = "";

        string parameters = "";

        if (optionals != null)
        {
            parameters = CollectionUtils.ToStringFromArray(optionals);
            completeUri = baseUri + parameters;
        }

        if (page != 0)
        {
            completeUri = baseUri + "&page=" + page;
        }
        HttpWebRequest reqForToken = HttpWebRequest.CreateHttp(completeUri);
        reqForToken.Method = "GET";
        var respToken = await client.DoRequestJsonAsync<ObservableCollection<Anime>>(reqForToken);

        return respToken;
    }

ToStringFromArray 函数

public static string ToStringFromArray(string[] arrayString)
    {
        string result = string.Join("", arrayString);
        return result;
    }

请求动漫通话

string[] ds = new string[] { "&status", "=active", "&season","=fall" };
var nm = await Requests.CreateMultipleTasksAsync(ds);

CreateMultipleTaskAsync 调用

 public static async Task<ObservableCollection<Anime>> CreateMultipleTasksAsync(int page=0 ,params string[] optionals)
    {
        Task<Auth> download1 = RequestsAuth();

        Auth length1 = await download1;

        Task<ObservableCollection<Anime>> download2 = RequestsAnime(download1.Result.Access_token,page, optionals);

        var animeList = await download2;

        return animeList;
    }

我知道这是一种笨拙的方式。我需要知道一个更好的解决方案。我的目标是-

  1. 在 URL
  2. 中传递可变数量的参数
  3. 在参数后附加“&”和“=”

我建议您将所有查询字符串参数放在 Dictionary:

var parameters = new Dictionary<string, string>
{
    { "status", "active" },
    { "season", "fall" }
};

然后您可以调用以下方法生成有效的查询字符串(注意对 Uri.EscapeDataString:

的调用
string CreateQueryString(Dictionary<string, string> parameters)
{
    return String.Join("&", parameters
        .Select(param => String.Format("{0}={1}", 
            Uri.EscapeDataString(param.Key), 
            Uri.EscapeDataString(param.Value)))
        .ToArray());
}

只需将 queryString 附加到您 baseUri:

completeUri = baseUri + "&" + CreateQueryString(parameters);