C# 在Web API上获取POST数据

C# 在Web API上获取POST数据,c#,curl,asp.net-web-api,C#,Curl,Asp.net Web Api,我有一个用c#运行的Web API服务器。httpget方法工作得很好,但我对Web Api太陌生,无法让帖子正常工作,我所做的搜索也有点徒劳无功 这是我在ApiController中的HttpPost [HttpPost] public bool UploadLogs(UploadLogsIn logs) { return true; } 这就是模型 public class UploadLogsIn { public byte[] l

我有一个用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");
那么我的参数是空的

这里的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}]}
我肯定有些愚蠢的事情我做得不对。任何帮助都将不胜感激

请尝试在上传日志中使用[FromBody]


我还将[FromBody]添加到输入数据中

我查看了建议我在post声明中发送数据的内容:

curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{     "EmailAddress": "string",    "Title": "string",     Message": "string",     "OriginId": 0,     "Name": "string"   }'  http://wfadpqa.sidmar.be/SecureIt.Service/api/contact'

所需的类与正在发送的数据不匹配

您想要的类如下所示

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; }
}
{"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; }
}
{"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; }
}
{"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; }
}
{"aLogs": 10}

对不起,我没提那件事。我已经添加了它,并且在
[HttpPost]
下面添加了“[ResponseType(typeof(UploadLogsIn))]”,但没有效果?还是同一个问题?尝试使用fiddler嗅探请求主体中发送的内容我正在使用Wireshark。我将编辑我的问题,添加,以及尝试这个。。。不要使用
public bool UploadLogs([FromBody]UploadLogs in logs)
尝试使用
public bool UploadLogs([FromBody]对象日志)
。然后使用调试器检查该对象。@Vladimir查看正在发送的JSON。它的格式好吗?从这里开始。发送的数据不是格式良好的JSON数据。查看如何构造JSON对象。这些类与被发送的json不匹配,我已经将字符串更改为`curl_easy_setopt(curl,curloopt_POSTFIELDS,R“({“UploadLogsIn”:[{“aLogs”:10}]})”;JSON中还有什么错误吗?结果在这一阶段保持不变。null的实际问题是因为我在字节[]中使用了无效信息。现在一切正常。