You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# .NET Core使用RestSharp调用含不同类型查询参数的GET API

问题描述

需要调用的API地址为:https://localhost:300/api/vi/Product?center=10&ProdNumber=271,该接口包含两个查询参数:

  • center:string类型
  • ProdNumber:int类型

使用通用GET端点调用代码时,因参数类型不同,不清楚如何构造请求对象传入这两个参数。现有代码如下:

public RestRequest RestRequestGet<T>(string uri, List<RequestParameterVM> parameter)
{
    var request = new RestRequest(uri, Method.Get);
    request.AddHeader("content-type", "application/json");
    parameter.ForEach(param =>
        request.AddParameter(param.ParameterKey, param.ParameterValue));
    return request;
}

public class RequestParameterVM
{
    public string ParameterKey { get; set; } = null!;
    public string ParameterValue { get; set; } = null!;
}

// 调用Get端点
List<RequestParameterVM> requestParameter= new List<RequestParameterVM>();
string url = $"{_configuration[Keys.url]}";

// 不清楚如何构造这两个查询参数传入下方方法

var restClient = new RestClient();
var request = _service.RestRequestGet<List<RequestParameterVM>>(url, requestParameter);
RestResponse response = await restClient.ExecuteAsync(request);
if (response.Content != null)
  return JsonConvert.DeserializeObject<order>(response.Content);
解决方案

1. 快速适配现有代码构造参数

RestSharp的AddParameter方法会自动处理参数类型转换,即使传入字符串形式的数值,也能正确生成目标查询参数。直接将int类型的ProdNumber转为字符串后添加到参数列表即可:

List<RequestParameterVM> requestParameter = new List<RequestParameterVM>
{
    new RequestParameterVM { ParameterKey = "center", ParameterValue = "10" },
    new RequestParameterVM { ParameterKey = "ProdNumber", ParameterValue = "271" }
};

这样调用后,生成的请求会自动带上?center=10&ProdNumber=271的查询参数,完全符合API要求。

2. 优化通用方法(支持多类型参数)

如果后续需要处理更多类型的参数,建议修改现有代码,让参数支持任意类型值,提升方法的健壮性:

第一步:修改RequestParameterVM类

将ParameterValue的类型改为object,支持存储任意类型的参数值:

public class RequestParameterVM
{
    public string ParameterKey { get; set; } = null!;
    public object ParameterValue { get; set; } = null!;
}

第二步:修改RestRequestGet方法

移除不必要的content-type头(GET请求无请求体,不需要该头),并使用AddQueryParameter明确添加查询参数,避免歧义:

public RestRequest RestRequestGet<T>(string uri, List<RequestParameterVM> parameters)
{
    var request = new RestRequest(uri, Method.Get);
    foreach (var param in parameters)
    {
        request.AddQueryParameter(param.ParameterKey, param.ParameterValue);
    }
    return request;
}

第三步:构造参数时直接传入对应类型

此时可以直接传入int类型的ProdNumber,无需手动转换:

List<RequestParameterVM> requestParameter = new List<RequestParameterVM>
{
    new RequestParameterVM { ParameterKey = "center", ParameterValue = "10" },
    new RequestParameterVM { ParameterKey = "ProdNumber", ParameterValue = 271 }
};

内容的提问来源于stack exchange,提问作者Ann Snow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:31:16