使用 Owin Self-Host ASP.Net API2 无法接收 POST 正文中包含数据而不是查询字符串的请求
Using Owin Self-Host ASP.Net API2 Can't Receive POST Request with data in body instead of query string
我一直在制作一个机器人来接收来自方舟:生存进化游戏服务器的通知,并将它们发送到使用 Steam 聊天系统的玩家的 Steam 帐户!
好吧,一切都做得很好,没有问题,我使用从查询字符串发送的数据测试了我的工作,它可以正常工作并发送消息等。
但现在我使用游戏服务器检查,它不会工作。
问题似乎来自于发送带有正文内容而不是查询字符串的 HTTP POST 请求,因为我的应用程序不会接收它们。
我做了很多例子来接收 POST 请求,但似乎没有用,
我希望这里有人知道如何解决这个问题,我已经失去了所有希望,因为我已经为此工作了 5 个多小时,甚至在 C# SOChat 中询问它。
这些似乎都不起作用:
public void Post1(string key, ulong steamid, string notetitle, string message)
{
if (!Program.settings.UnSub.Contains(steamid))
{
SteamID SID = new SteamID(steamid);
Program.steamFriends.SendChatMessage(SID, EChatEntryType.ChatMsg, System.DateTime.UtcNow + " UTC ( GMT ) : " + notetitle);
Thread.Sleep(1000);
Program.steamFriends.SendChatMessage(SID, EChatEntryType.ChatMsg, message);
}
}
public void Post([FromBody]string key,[FromBody]ulong steamid,[FromBody]string notetitle,[FromBody]string message)
{
if (!Program.settings.UnSub.Contains(steamid))
{
SteamID SID = new SteamID(steamid);
Program.steamFriends.SendChatMessage(SID, EChatEntryType.ChatMsg, System.DateTime.UtcNow + " UTC ( GMT ) : " + notetitle);
Thread.Sleep(1000);
Program.steamFriends.SendChatMessage(SID, EChatEntryType.ChatMsg, message);
}
}
public class MyFormData
{
public string Data { get; set; }
}
public void Post([FromBody]MyFormData formData)
{
}
public void Post([FromBody]MyData formData)
{
}
public class MyData
{
public string key { get; set; }
public string steamid { get; set; }
public string message { get; set; }
public string notetitle { get; set; }
}
public void Post(string value)
{
}
public void Post1([FromBody]string value)
{
}
创建一个对象来接收正文中的数据:
public class SteamData
{
public string Key {get; set;}
public ulong SteamId {get; set;}
public string NoteTitle {get; set;}
public string Message {get;set;}
}
然后像这样更改您的 Post
方法:
public void Post([FromBody] SteamData data)
{
if (!Program.settings.UnSub.Contains(steamid))
{
SteamID SID = new SteamID(data.SteamId);
Program.steamFriends.SendChatMessage(SID, EChatEntryType.ChatMsg, System.DateTime.UtcNow + " UTC ( GMT ) : " + data.NoteTitle);
Thread.Sleep(1000);
Program.steamFriends.SendChatMessage(SID, EChatEntryType.ChatMsg, data.Message);
}
}
然后当 post 发生时,数据可以更容易地放在请求的正文中。 WebAPI 很难通过 [FromBody] 属性检索多个参数。你可以做到,但它比它值得的更难。
希望对您有所帮助。
我一直在制作一个机器人来接收来自方舟:生存进化游戏服务器的通知,并将它们发送到使用 Steam 聊天系统的玩家的 Steam 帐户!
好吧,一切都做得很好,没有问题,我使用从查询字符串发送的数据测试了我的工作,它可以正常工作并发送消息等。
但现在我使用游戏服务器检查,它不会工作。
问题似乎来自于发送带有正文内容而不是查询字符串的 HTTP POST 请求,因为我的应用程序不会接收它们。
我做了很多例子来接收 POST 请求,但似乎没有用, 我希望这里有人知道如何解决这个问题,我已经失去了所有希望,因为我已经为此工作了 5 个多小时,甚至在 C# SOChat 中询问它。
这些似乎都不起作用:
public void Post1(string key, ulong steamid, string notetitle, string message)
{
if (!Program.settings.UnSub.Contains(steamid))
{
SteamID SID = new SteamID(steamid);
Program.steamFriends.SendChatMessage(SID, EChatEntryType.ChatMsg, System.DateTime.UtcNow + " UTC ( GMT ) : " + notetitle);
Thread.Sleep(1000);
Program.steamFriends.SendChatMessage(SID, EChatEntryType.ChatMsg, message);
}
}
public void Post([FromBody]string key,[FromBody]ulong steamid,[FromBody]string notetitle,[FromBody]string message)
{
if (!Program.settings.UnSub.Contains(steamid))
{
SteamID SID = new SteamID(steamid);
Program.steamFriends.SendChatMessage(SID, EChatEntryType.ChatMsg, System.DateTime.UtcNow + " UTC ( GMT ) : " + notetitle);
Thread.Sleep(1000);
Program.steamFriends.SendChatMessage(SID, EChatEntryType.ChatMsg, message);
}
}
public class MyFormData
{
public string Data { get; set; }
}
public void Post([FromBody]MyFormData formData)
{
}
public void Post([FromBody]MyData formData)
{
}
public class MyData
{
public string key { get; set; }
public string steamid { get; set; }
public string message { get; set; }
public string notetitle { get; set; }
}
public void Post(string value)
{
}
public void Post1([FromBody]string value)
{
}
创建一个对象来接收正文中的数据:
public class SteamData
{
public string Key {get; set;}
public ulong SteamId {get; set;}
public string NoteTitle {get; set;}
public string Message {get;set;}
}
然后像这样更改您的 Post
方法:
public void Post([FromBody] SteamData data)
{
if (!Program.settings.UnSub.Contains(steamid))
{
SteamID SID = new SteamID(data.SteamId);
Program.steamFriends.SendChatMessage(SID, EChatEntryType.ChatMsg, System.DateTime.UtcNow + " UTC ( GMT ) : " + data.NoteTitle);
Thread.Sleep(1000);
Program.steamFriends.SendChatMessage(SID, EChatEntryType.ChatMsg, data.Message);
}
}
然后当 post 发生时,数据可以更容易地放在请求的正文中。 WebAPI 很难通过 [FromBody] 属性检索多个参数。你可以做到,但它比它值得的更难。
希望对您有所帮助。