Использование собственного хоста Owin ASP.Net API2 не может получить запрос POST с данными в теле вместо строки запроса
Я делал бота, чтобы получать уведомления от игрового сервера Ark: Survival Evolved и отправлять их на учетную запись Steam игрока, используя систему Steam Chat!
ну, все было сделано без проблем, я проверил свою работу, используя данные, отправленные из строки запроса, и она работает и отправляет сообщения и т. д.
но теперь, когда я проверяю, используя игровой сервер, он не будет работать.
Проблема, кажется, исходит от отправки 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)
{
}
1 ответ
Создайте объект для получения данных в теле:
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]. Вы можете сделать это, но это сложнее, чем оно того стоит.
Надеюсь, это поможет.