使用 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)
    {
    }

使用 Owin 自托管 ASP.Net API2 无法接收正文中的数据而不是查询字符串的 POST 请求

创建一个对象来接收正文中的数据:

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] 属性检索多个参数。 你可以做到,但这比它的价值更难。

希望有帮助。