You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#客户端调用Minimal API出现UnsupportedMediaType错误的解决方法

问题原因分析

你的Minimal API默认仅支持JSON格式的请求体(Postman发送JSON正常验证了这一点),但C#客户端实际发送的是application/x-www-form-urlencoded格式的表单数据,同时错误地配置了Accept头(该头用于声明客户端接受的响应格式,而非请求体格式),导致服务端无法识别请求体类型,返回UnsupportedMediaType错误。


解决方案

方案一:修改C#客户端发送JSON请求

这是最直接的方式,和Postman的请求逻辑保持一致:

// 构造与API端匹配的数据结构
var rabbitMsg = new {
    exchange = "system",
    routingkey = routingkey,
    message = message
};

// 将对象序列化为JSON字符串
string jsonContent = System.Text.Json.JsonSerializer.Serialize(rabbitMsg);

// 创建JSON请求内容,指定Content-Type为application/json
var content = new StringContent(jsonContent, System.Text.Encoding.UTF8, "application/json");

// 发送POST请求
var response = await Client.PostAsync("/sendmessage", content);

方案二:修改API支持表单格式请求

如果业务需要兼容表单格式请求,可以在API端添加表单绑定支持:

  1. 确保项目已引用Microsoft.AspNetCore.Mvc.Core包
  2. 在参数上添加[FromForm]特性,指定从表单绑定数据:
app.MapPost("/sendmessage", ([FromForm] RabbitMessage rm) => 
    server.SendMessage(rm.exchange, rm.routingkey, rm.message));

app.Run();

record RabbitMessage(string exchange, string routingkey, string message);

修改后,你原来的FormUrlEncodedContent客户端代码即可正常工作,但此时Postman发送JSON请求会失效,如需同时支持两种格式,需额外处理参数绑定逻辑(不推荐,建议统一请求格式)。


补充说明
  • Content-Type头用于告诉服务端请求体的格式,Accept头用于声明客户端接受的响应格式,二者不要混淆。
  • Minimal API默认使用System.Text.Json进行序列化/反序列化,客户端用相同组件序列化可避免格式兼容问题。

内容的提问来源于stack exchange,提问作者Serve Laurijssen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:50:27