如何发送正文为 json 的 GET 请求?
How can I send a GET request with json body?
有什么方法可以使用 c# 发送带有 JSON 正文的 GET 请求?我正在调用 API 以使用 GET 请求检索项目列表,但我必须在 JSON 中传递 customer_id。我能够在 Postman 和 Python 中成功地做到这一点。但是,我正在使用的遗留应用程序是作为 c# .NET winform 构建的。我可以使用 HttpClient 进行其他调用,但经过一些研究后我发现此 class 不允许使用正文进行 GET 请求,除非使用 CORE。还有其他选择吗?
对于HTTP方法GET,正文没有意义。根据 HTTP 规范,它将被忽略。使用 GET http 动词从 API 获取资源时,您可以选择传递查询字符串 (http://somedomain.com/api/getValues?key=1) or pass the parameter directly in the 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中的参数。查询字符串非常有用,但你必须知道什么时候使用它,例如,如果你想缩小给定某些值的结果,你可以将查询字符串发送给它们。
根据Ian Kemp's answer to this 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
有什么方法可以使用 c# 发送带有 JSON 正文的 GET 请求?我正在调用 API 以使用 GET 请求检索项目列表,但我必须在 JSON 中传递 customer_id。我能够在 Postman 和 Python 中成功地做到这一点。但是,我正在使用的遗留应用程序是作为 c# .NET winform 构建的。我可以使用 HttpClient 进行其他调用,但经过一些研究后我发现此 class 不允许使用正文进行 GET 请求,除非使用 CORE。还有其他选择吗?
对于HTTP方法GET,正文没有意义。根据 HTTP 规范,它将被忽略。使用 GET http 动词从 API 获取资源时,您可以选择传递查询字符串 (http://somedomain.com/api/getValues?key=1) or pass the parameter directly in the 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中的参数。查询字符串非常有用,但你必须知道什么时候使用它,例如,如果你想缩小给定某些值的结果,你可以将查询字符串发送给它们。
根据Ian Kemp's answer to this 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