如何从C# Windows应用向.NET Core API POST发送DataSet对象数据?
解决方案
问题根源
你原代码里用的UploadValues方法仅适用于提交NameValueCollection格式的表单数据,但你设置了Content-Type为application/json,格式不匹配;且DataSet无法直接转换为NameValueCollection,这是导致失败的核心原因。
Windows应用端(发送DataSet)
改用HttpClient发送JSON格式的DataSet,步骤如下:
- 借助序列化库(Newtonsoft.Json或System.Text.Json)将DataSet转为JSON字符串
- 通过HttpClient发送POST请求,把JSON作为请求体传递
代码示例(使用Newtonsoft.Json):
using System.Net.Http; using System.Text; using Newtonsoft.Json; // 需要安装Newtonsoft.Json NuGet包 public async Task<string> SubmitRequest(DataSet request) { // 序列化DataSet为JSON string jsonData = JsonConvert.SerializeObject(request); StringContent content = new StringContent(jsonData, Encoding.UTF8, "application/json"); using (HttpClient client = new HttpClient()) { HttpResponseMessage response = await client.PostAsync(Url, content); response.EnsureSuccessStatusCode(); return await response.Content.ReadAsStringAsync(); } }
如果用.NET自带的System.Text.Json,序列化代码替换为:
string jsonData = System.Text.Json.JsonSerializer.Serialize(request);
.NET Core API端(接收DataSet)
修改接口方法,直接接收DataSet类型参数,ASP.NET Core会自动完成JSON反序列化:
using Microsoft.AspNetCore.Mvc; using System.Data; [ApiController] [Route("api/[controller]")] public class DataController : ControllerBase { [HttpPost("submit-request")] public IActionResult SubmitRequest([FromBody] DataSet values) { // 处理DataSet逻辑 if (values == null) { return BadRequest("DataSet不能为空"); } // 示例处理逻辑 string result = $"收到{values.Tables.Count}个数据表,第一个表包含{values.Tables[0].Rows.Count}条数据"; return Ok(result); } }
注意事项
- 确保两端都引用
System.Data程序集(DataSet所在命名空间) - 若使用Newtonsoft.Json,API端需安装
Microsoft.AspNetCore.Mvc.NewtonsoftJson包,并在Program.cs中配置:builder.Services.AddControllers().AddNewtonsoftJson(); - Windows应用的请求Url需对应API的完整路由(例如
https://your-api-domain/api/data/submit-request)
内容的提问来源于stack exchange,提问作者Hosam Eldeen Reda
相关产品推荐
相关产品推荐

