.net 将请求发布到具有JSON主体的最小API服务

ymzxtsji  于 2023-01-22  发布在  .NET
关注(0)|答案(1)|浏览(116)

我有一个最小的API服务与MapPost:

app.MapPost("/sendmessage", (RabbitMessage rm) => server.SendMessage(rm.exchange, 
rm.routingkey, rm.message));

app.Run();

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

它在使用Postman发送JSON时工作正常:

{
    "message": "msg",
    "routingkey": "freestorage",
    "exchange": "system"
}

但是从C#客户端:

var kv = new Dictionary<string, string> {
    { "exchange", "system" },
    { "routingkey", routingkey },
    { "message", message }
};

var content = new FormUrlEncodedContent(kv);

string contentType = "application/json";

if (Client.DefaultRequestHeaders.Accept.FirstOrDefault(hdr => hdr.MediaType == contentType) == default)
    Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(contentType));

var response = await Client.PostAsync("sendmessage", content);

响应是UnsupportedMediaType。将这些值发送到最小API的正确方法是什么?或者我需要对API本身进行不同的设置吗?

qoefvg9y

qoefvg9y1#

我不认为使用FormUrlEncodedContent是正确的方式,因为它是用于application/x-www-form-urlencoded MIME类型。
相反,您应该使用StringContent传递请求主体,并将kv序列化为content

using System.Text;
using Newtonsoft.Json;

var stringContent = new StringContent(JsonConvert.SerializeObject(kv), 
    Encoding.UTF8, 
    "application/json");

var response = await Client.PostAsync("sendmessage", stringContent);

相关问题