2016-07-14 3 views
0

방주에서 알림 수신 : 생존 진화 게임 서버를 만들어서 Steam 계정으로 보냅니다. 스팀 채팅 시스템을 사용하는 플레이어!Owin 자체 호스트 사용 ASP.Net API2 쿼리 문자열 대신 본문에 데이터가 포함 된 POST 요청을 수신 할 수 없습니다.

아니라, 모든 것이 문제없이 크게 이루어졌다, 나는 쿼리 문자열에서 전송 된 데이터를 사용하여 내 작업을 테스트하고, 작업 및 메시지 등

하지만 지금을 보내 나는 게임 서버를 사용하여 체크하는 것이, 그것은 작동하지 않습니다.

문제는 쿼리 문자열 대신 본문 내용이있는 HTTP POST 요청을 보내는 것으로서 내 응용 프로그램이 수신하지 못하는 것 같습니다.

POST 요청을 수신하기 위해 많은 예제를 만들었지 만 작동하지 않는 것 같아요. 저는이 문제를 해결하는 방법을 알고있는 사람이되기를 바랍니다. 5 시간 넘게이 작업을하고 있기 때문에 모든 희망을 잃었습니다. 그것에 대해 C# SOChat. 이들의

비 보인다 https://github.com/LuckyPed/Ark-Steam-Notifier-Console/blob/Post-Data/ArkSteamNotifier/ValuesController.cs가 작동 : : 그런 다음 Post을 변경

public class SteamData 
{ 
    public string Key {get; set;} 
    public ulong SteamId {get; set;} 
    public string NoteTitle {get; set;} 
    public string Message {get;set;} 
} 

:

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) 
    { 
    } 
+0

이것이 작동하지 않는다고 말하면 어떤 문제가 발생합니까? – Pedro

+0

게임 서버가 POST를 보내면 앱에 표시되지 않습니다. 하지만 피들러와 나는 POST가 만들어지고 있는지 확인할 수 있습니다 : http://prntscr.com/bswyme – Pedram

+1

아, 당신은이 모든'Post' 액션들을 모두 한 번에 컨트롤러에 가지고 있습니까? 이는 요청에 대해 어느 것을 선택해야할지 모르기 때문에 Web API를 이동할 수 있습니다. – Pedro

답변

1

은 본문에 데이터를 수신하는 객체를 생성 여기

내 코드입니다 방법 :

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] 속성으로 둘 이상의 매개 변수를 검색하는 데 어려움이 있습니다. 당신은 할 수는 있지만, 그것이 가치있는 것보다 어렵습니다.

희망이 있습니다.

+0

나는 이미 실제로 그렇게했다. 그것은 public class MyData와 Post ([FromBody] MyData formData)이다. public void 각기 다른 방식으로 게시물을 올리 겠지만 모두 중단 점을 만들었고 그 중 NON이 히트를 기록하고 있습니다. ( – Pedram

+1

@Pedram 컨트롤러에서 시도한 횟수가 많을 수 있습니다. 그런데, @MichaelDotKnox와 같이 하나의 "Post"액션이 기술되어 있고 그것이 작동하는지 알 수 있습니다. 그런데이 경우에는'[FromBody]'속성이 필요 없습니다. – Pedro

+0

그래,이 방법으로 효과가있었습니다. 동시에 많은 게시물을 보유하고 있습니다. – Pedram

관련 문제