gpt4 book ai didi

c# - 在 Web API 上取回 POST 数据

转载 作者:行者123 更新时间:2023-11-30 20:30:01 24 4
gpt4 key购买 nike

我有一个在 C# 中运行的 Web API 服务器。 httpget 方法工作得很好,但我对 Web Api 太陌生了,无法让帖子工作,而且我所做的搜索有点无果。

这是我在 ApiController 中的 HttpPost

    [HttpPost]
public bool UploadLogs(UploadLogsIn logs)
{
return true;
}

这是模型

public class UploadLogsIn
{
public byte[] logData { get; set; }
public int aLogs { get; set; }
}

在 C++ 应用程序中,我尝试将数据发布到此方法。我正在使用 Curl 来发帖

    CURL *curl;
CURLcode res;

curl = curl_easy_init();
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.56.109:9615/api/WebApiService/UploadLogs");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, R"({"UploadLogsIn": [{"aLogs: 10}]})");
curl_easy_setopt(curl, CURLOPT_POST, 1L);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20);
curl_easy_perform(curl);
}

curl_easy_cleanup(curl);

当我调试 Web Api 时,方法被命中,但参数不包含任何数据。

更新使用 wireshark,这是发送的信息

POST /api/WebApiService/UploadLogs HTTP/1.1
Host: 192.168.56.109:9615
Accept: */*
Content-Length: 32
Content-Type: application/x-www-form-urlencoded

Form item: "{"UploadLogsIn": [{"aLogs: 10}]}" = ""

结束更新

如果我添加一个标题

        struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Accept: application/json");
headers = curl_slist_append(headers, "Content-Type: application/json");
headers = curl_slist_append(headers, "charsets: utf-8");

那么我的参数为null。

这个的 Wireshark 转储是

POST /api/WebApiService/UploadLogs HTTP/1.1
Host: 192.168.56.109:9615
Accept: application/json
Content-Type: application/json
charsets: utf-8
Content-Length: 32

Line-based text data: application/json
{"UploadLogsIn": [{"aLogs: 10}]}

我确定有些愚蠢的事情我没有做对。任何帮助将不胜感激

最佳答案

您想要的类与正在发送的数据不匹配。

你想要的类看起来像这样

public class UploadLogsIn {
public byte[] logData { get; set; }
public int aLogs { get; set; }
}

但是发送的数据是这样的

{"UploadLogsIn": [{"aLogs": 10}]}

反序列化后是这样的

public class UploadLogsIn
{
public int aLogs { get; set; }
}

public class RootObject
{
public IList<UploadLogsIn> UploadLogsIn { get; set; }
}

看出区别了吗?

让模型绑定(bind)到这个 Action

[HttpPost]
public bool UploadLogs([FromBody]UploadLogsIn logs) {
return true;
}

发送的数据应该是这样的

{"aLogs": 10}

关于c# - 在 Web API 上取回 POST 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45417493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com