C# 在Web API上获取POST数据
我有一个用c#运行的Web API服务器。httpget方法工作得很好,但我对Web Api太陌生,无法让帖子正常工作,我所做的搜索也有点徒劳无功 这是我在ApiController中的HttpPostC# 在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
[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的实际问题是因为我在字节[]中使用了无效信息。现在一切正常。