商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > .Net HttpClient 使用请求数据的处理方法

.Net HttpClient 使用请求数据的处理方法

  发布于2026-07-23 阅读(0)

扫一扫,手机访问

HttpClient 使用请求数据

0、初始化及全局设置

//初始化:必须先执行一次#!import ./ini.ipynb

1、使用url 传参

参数直接塞在URL里,像这样:http://www.baidu.com?name=zhangsan&age=18。GET、HEAD请求最常用这种玩法。好处是简单、直观,浏览器还能缓存;但短板也很明显——参数长度有限制,数据直接暴露在地址栏里,一长串看着也不够优雅。

/**    URL传参:适合简单数据类型*/{    //获取响应字符串    {        var response = await SharedClient.GetAsync("api/Normal/GetAccount?id=1");        response.EnsureSuccessStatusCode();        var content = await response.Content.ReadAsStringAsync();        Console.WriteLine(content);    }    //获取响应对象    {        var response = await SharedClient.GetAsync("api/Normal/GetAccount?id=1");        response.EnsureSuccessStatusCode();        var result = await response.Content.ReadFromJsonAsync>();        result.Display();    }    //直接获取响应对象    {        var result = await SharedClient.GetFromJsonAsync>("api/Normal/GetAccount?id=1");        result.Display();    }}

2、使用路由传参

路由参数其实是URL的一部分,只不过由后端API提前定好了位置。比如后端要求/user/:id,前端就得传/user/1,这里的1就是路由参数。用起来很自然,但得跟后端商量好格式。

/*** 路由参数:参数是URL的一部分,由后端指定*/{//大括号:方便折叠、开成单独的作用域    var response = await SharedClient.GetAsync("api/Normal/GetAccount/管理员01");    response.EnsureSuccessStatusCode();    var content = await response.Content.ReadAsStringAsync();    Console.WriteLine(content);}

3、使用请求头

把数据塞进请求头发送给后端,也能传多个字段。不过请求头一般只适合传简单的文本数据,比如JWT Token这种。如果传中文,记得先编码,服务端收到后再解码。

/** 请求头: 值必须是字符串,如果有中文等需进行编码*/{    //中文先编码,服务端接收后要解码    var codedName = System.Net.WebUtility.UrlEncode("管理员01");    //SharedClient是共用的,所以不能多次添加,先移除旧值    if (SharedClient.DefaultRequestHeaders.Contains("name"))    {        SharedClient.DefaultRequestHeaders.Remove("name");    }    SharedClient.DefaultRequestHeaders.Add("name", codedName);    var response = await SharedClient.GetAsync("api/Normal/GetAccountFromHeader");    response.EnsureSuccessStatusCode();    var content = await response.Content.ReadAsStringAsync();    Console.WriteLine(content);}

4、使用请求体

请求体是数据的主要载体,可以放简单的字符串,也可以放二进制文件、表单键值对、JSON、流式数据,甚至混搭多种类型。数据在底层都是二进制流,通过网络传到服务端,由服务端按约定解析。

关于请求体,有几点值得注意:

  • 不管格式如何,最终都是二进制传输,客户端和服务端必须“对上暗号”才能正确解析。
  • 客户端通过Content-Type请求头告诉服务端“我发的是哪种数据”,服务端据此识别处理。常见类型包括:multipart/form-dataapplication/x-www-form-urlencodedapplication/jsontext/plain等。
  • ASP.NET Core 默认的请求体类型是FormUrlEncodedContent,所以通常客户端发的是表单数据。框架对JSON和表单数据有特殊支持,比如可以用[FromBody]特性自动绑定到模型;但普通文本就没这么方便了,得从请求体原始数据里自己解析。
  • 一次请求可以同时发送多种格式的数据,用分隔符隔开。服务端从Content-Type: multipart/mixed; boundary="d2e38916-df08-4fec-a40e-3e5179736f32"拿到分隔符,然后按分隔符把数据拆开。

HttpClient 中常用的请求体类型有:

  • MultipartFormDataContent
  • FormUrlEncodedContent
  • JsonContent
  • StringContent
  • ByteArrayContent
  • StreamContent
  • MultipartContent

MultipartFormDataContent :Form表单

Form表单是最常见的提交方式之一,适合上传文件或混合数据。

/**   Form表单,提交数据。一般为Put或Post提交。*/{    var formContent = new MultipartFormDataContent();    formContent.Add(new StringContent("1"), "id");    formContent.Add(new StringContent("管理员01"), "name");    var response = await SharedClient.PostAsync("api/AdvancedGet/PostFormData", formContent);    string responseString = await response.Content.ReadAsStringAsync();    Console.WriteLine(responseString);}

FormUrlEncodedContent :Form表单 asp.net core 默认接收方式

/*    FormUrlEncoded 提交数据 */{    var urlEncodedData = new List>()    {        new KeyValuePair(key:"id",value:"1"),        new KeyValuePair(key:"name",value:"管理员01"),    };    var formContent = new FormUrlEncodedContent(urlEncodedData);    var response = await SharedClient.PostAsync("api/AdvancedGet/PostFormData", formContent);    string responseString = await response.Content.ReadAsStringAsync();    Console.WriteLine(responseString);}

StringContent 普通文本(也包括很多格式,甚至是自定义格式。要和服务器配合)

/*    普通文本方式提交数据*/{    var requestContent = new StringContent("我是请求体第一段内容", Encoding.UTF8, "text/plain");    var response = await SharedClient.PostAsync("/api/AdvancedPost/TextData", requestContent);    var content = await response.Content.ReadAsStringAsync();    Console.WriteLine(content);}
本文转载于:https://www.jb51.net/aspnet/3412955ay.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注