簡體   English   中英

如何使用 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。 還有其他選擇嗎?

根據Ian Kemp 對此問題的回答,這可以使用System.Net.Http.WinHttpHandler庫在 .NET 框架項目中完成。 我只是在這里添加答案的相關部分,但我建議 go 檢查他的完整答案

首先,從 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

用HTTP方法GET,body沒有意義了。 根據 HTTP 規范,它將被忽略。 When getting resources from your API using the GET http verb, you have the option to pass a query string ( http://somedomain.com/api/getValues?key=1 ) or pass the parameter directly in the url ( http:/ /somedomain.com/api/getValues/1 )

要在 controller 中接收它,您必須期望參數或查詢字符串如下所示:

如果參數在 URL 中:

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

(確保您在 function 中的參數名稱與您在路由中給它的名稱匹配)

如果參數是查詢字符串:

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

(確保查詢字符串鍵名與函數中的參數名匹配)

最佳做法是使用 URL 中的參數。 查詢字符串非常有用,但是您必須知道何時使用它,例如,如果您想縮小給定某些值的結果,您可以將查詢字符串發送給它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM