如何发送带有json正文的GET请求?

时间:2020-04-03 02:37:14

标签: c# api get request httpclient

有什么办法可以使用c#发送带有JSON正文的GET请求吗?我正在调用一个API,以使用GET请求检索项目列表,但是我必须在JSON中传递customer_id。我能够在Postman和Python中成功做到这一点。但是,我正在使用的旧版应用程序是作为c#.NET winform构建的。我可以使用HttpClient进行其他调用,但是经过一些研究,我发现该类不允许body进行GET请求,除非使用CORE。还有其他选择吗?

2 个答案:

答案 0 :(得分:0)

根据Ian Kemp'sthis question的回答, 这可以使用System.Net.Http.WinHttpHandler库在.NET Framework项目中完成。 (我将在此处添加答案的相关部分,但我建议去检查他的完整答案

首先,从Nuget安装System.Net.Http.WinHttpHandler库,然后将其用作您的http客户端处理程序,如下所述:

var handler = new WinHttpHandler();
var client = new HttpClient(handler);
var request = new HttpRequestMessage
{
    Method = HttpMethod.Get,
    RequestUri = new Uri("some url"),
    Content = new StringContent("some json", Encoding.UTF8, ContentType.Json),
};

var response = await client.SendAsync(request).ConfigureAwait(false);
//Handle the response as you see fit

答案 1 :(得分:-1)

使用HTTP方法GET,主体没有任何意义。根据HTTP规范,它将被忽略。使用GET http动词从API获取资源时,可以选择传递查询字符串(http://somedomain.com/api/getValues?key=1)或直接在url(http://somedomain.com/api/getValues/1)中传递参数

要在控制器中接收它,您将必须期望像这样的参数或查询字符串:

如果参数在URL中:

[HttpGet("/api/getValues/{id}")]
public async Task<IActionResult> GetValues(int id){}

(确保函数中的参数名称与您在路由中为其指定的名称相匹配)

如果参数是查询字符串:

[HttpGet("/api/getValues")]
public async Task<IActionResult> GetValues(string key){}

(确保查询字符串键名与函数中的参数名匹配)

最佳做法是在URL中使用参数。查询字符串非常有用,但是您必须知道何时使用它,例如,如果您想在给定特定值的情况下缩小结果范围,则可以使用查询字符串来发送它们。