如何从另一个MVC项目调用Web API,传递header与body两类参数
ASP.NET MVC调用带Header、Body参数API的实现方案
以下两种方案均适用于主流MVC场景,可根据你的项目.NET版本选择:
方案1:使用HttpClient(推荐,兼容.NET Framework 4.5+、.NET Core/.NET全版本)
HttpClient是官方推荐的HTTP请求类,性能和稳定性更优,实现步骤如下:
- 优先建议通过单例模式或依赖注入管理HttpClient实例,避免频繁创建释放导致的套接字资源耗尽,ASP.NET Core可直接注入
IHttpClientFactory创建实例 - 调用代码示例如下:
// 示例:Header参数名为X-App-Key,Body为JSON格式参数 using (var client = new HttpClient()) { // 1. 添加请求Header参数 client.DefaultRequestHeaders.Add("X-App-Key", "你的header参数值"); // 2. 构造请求Body // 如果是JSON格式Body,参考如下写法 var bodyObj = new { UserId = 123, Content = "测试内容" }; string jsonBody = JsonConvert.SerializeObject(bodyObj); var content = new StringContent(jsonBody, Encoding.UTF8, "application/json"); // 如果是表单格式Body,替换为如下代码: // var formData = new Dictionary<string, string> // { // { "body参数名", "你的body参数值" } // }; // var content = new FormUrlEncodedContent(formData); // 3. 发送POST请求(传Body的接口通常为POST/PUT类型) HttpResponseMessage response = await client.PostAsync("目标API的完整请求地址", content); // 4. 处理返回结果 if (response.IsSuccessStatusCode) { string resultStr = await response.Content.ReadAsStringAsync(); // 自行解析返回结果即可 } }
方案2:使用WebClient(仅适用于.NET Framework老版本项目兼容)
如果你的项目是.NET Framework 4.5以下的旧MVC项目,可使用WebClient实现:
using (var client = new WebClient()) { // 添加Header参数 client.Headers.Add("X-App-Key", "你的header参数值"); client.Headers[HttpRequestHeader.ContentType] = "application/json"; // 构造Body并发送请求 string jsonBody = JsonConvert.SerializeObject(new { BodyParam = "参数值" }); string responseStr = client.UploadString("目标API地址", "POST", jsonBody); // 处理返回结果 }
注意事项
- Header参数名、参数值的格式、大小写要和目标API要求完全匹配,否则会出现校验失败的问题
- Body的内容格式要和
Content-Type请求头对应,否则API会无法解析Body参数 - 异步请求方法需要配合
await使用,MVC的Action方法要改为异步返回类型Task<ActionResult>避免线程阻塞
内容的提问来源于stack exchange,提问作者Allah Ditta
相关产品推荐
相关产品推荐

