C#中API POST请求传入字节数组及设置查询字符串参数方法
如何在HttpClient的POST请求中添加查询字符串参数?
你已经完成了文件转字节数组、创建ByteArrayContent、初始化HttpClient的步骤,现在需要把目标URL中的查询参数(item=sc_req_item&id=1000&file_name=Some_file.pdf)添加到POST请求里,这里提供几种实用的实现方式:
方法1:直接拼接查询参数到请求路径
如果参数是固定值,直接把查询字符串拼在请求相对路径后面即可:
// 修改原请求代码为: var response = await client.PostAsync("api/now/attachment/file?item=sc_req_item&id=1000&file_name=Some_file.pdf", byteArrayContent);
方法2:用QueryHelpers动态构建(推荐,适用于.NET Core/.NET 5+)
如果参数需要动态生成,使用QueryHelpers.AddQueryString可以优雅构建带参数的路径,还能自动处理字符编码问题:
using System.Net.Http; using System.Collections.Generic; // 定义查询参数集合 var queryParams = new Dictionary<string, string> { { "item", "sc_req_item" }, { "id", "1000" }, { "file_name", "Some_file.pdf" } }; // 构建带查询参数的请求路径 var requestPath = QueryHelpers.AddQueryString("api/now/attachment/file", queryParams); // 发起POST请求 var response = await client.PostAsync(requestPath, byteArrayContent);
方法3:用UriBuilder构建(兼容.NET Framework)
如果是在.NET Framework环境下,可以通过UriBuilder和HttpUtility.ParseQueryString来构建:
using System; using System.Web; // 需要引用System.Web程序集 var builder = new UriBuilder(client.BaseAddress + "api/now/attachment/file"); var query = HttpUtility.ParseQueryString(builder.Query); query["item"] = "sc_req_item"; query["id"] = "1000"; query["file_name"] = "Some_file.pdf"; builder.Query = query.ToString(); // 发起POST请求 var response = await client.PostAsync(builder.Uri, byteArrayContent);
注意:你的HttpClient已设置BaseAddress为https://dev.service.com,所以请求路径只需写相对路径,上述方法都会自动与BaseAddress拼接成完整请求URL。
内容的提问来源于stack exchange,提问作者John H.
相关产品推荐
相关产品推荐

