使用 Owin 自托管 ASP.Net API2 无法接收正文中的数据而不是查询字符串的 POST 请求
本文关键字:数据 请求 POST 字符串 查询 正文 Owin ASP Net API2 使用 | 更新日期: 2023-09-27 17:57:04
我一直在制作一个机器人来接收方舟:生存进化游戏服务器的通知,并使用蒸汽聊天系统将它们发送到玩家的 Steam 帐户!
好吧,一切都做得很好,没有问题,我使用从查询字符串发送的数据测试了我的工作,它可以工作并发送消息等。
但是现在我使用游戏服务器检查,它不起作用。
问题似乎来自发送带有正文内容而不是查询字符串的 HTTP POST 请求,因为我的应用程序不会收到它们。
我做了很多例子来接收 POST 请求,但似乎不起作用,我希望这里有人知道如何解决这个问题,当我为此工作了 5 个多小时,甚至在 C# SOChat 中询问它时,我失去了所有的希望。
这是我的代码:https://github.com/LuckyPed/Ark-Steam-Notifier-Console/blob/Post-Data/ArkSteamNotifier/ValuesController.cs
这些似乎都不起作用:
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);
}
}
然后,当发布发生时,数据可以更容易地出现在请求的正文中。 WebAPI 很难使用 [FromBody] 属性检索多个参数。 你可以做到,但这比它的价值更难。
希望有帮助。