Ненадежный ответ от действия - PullRequest
0 голосов
/ 06 апреля 2020

Я делаю. Net Core 3.1 API и получаю ненадежные ответы. Большую часть времени они пустые и очень редко работают, как ожидалось. Я использую Newtonsoft Json и добавил .AddNewtonsoft Json (); в соответствующие места в Startup.cs. Нет исключений и ответ Ok для каждого.

Вот полный код действия.

        [HttpPost("/lobby/new")]
        public IActionResult NewLobby([FromQuery] string name)
        {
            string playerGUID = Guid.NewGuid().ToString();

            var lobby = new Models.Lobby
            {
                LobbyMembers = new List<Models.Lobby.LobbyMember>
                {
                    new Models.Lobby.LobbyMember
                    {
                        PlayerID = playerGUID,
                        Name = name
                    }
                },
                HostID = playerGUID,
                State = Models.Lobby.LobbyState.Open
            };

            _lobbies.InsertOne(lobby);

            var response = new Models.JsonOut.LobbyInfo
            {
                LobbyID = lobby.MongoID,
                PlayerID = playerGUID
            };

            return Json(response);
        }

Вот пример ожидаемого и рабочего результата тела:

{"playerID":"7183f34b-3524-45d0-a760-bcf62b1f4313","lobbyID":"5e8ae31b844735202ceb62c3"}

Неожиданный результат равен 0B Json в теле ответа.

Странно, но иногда он работает, а не вообще. Вот моя сетевая вкладка Firefox инструментов разработчика. Выделены правильно. Strange XHR

ОБНОВЛЕНИЕ: я сделал mcve, и проблема не устранена. Я создал ASP. NET проект WebApi с. NET Core 3.1 и отключил Configure for HTTPS.

    public class TestController : Controller
    {
        [HttpPost("/lobby/new")]
        public IActionResult NewLobby([FromQuery] string name)
        {
            string playerGUID = Guid.NewGuid().ToString();

            var response = new Models.JsonOut.LobbyInfo
            {
                LobbyID = "test",
                PlayerID = playerGUID
            };

            return Json(response);
        }
    }

Я также прикреплю возвращаемый класс.

    public class LobbyInfo
    {
        [JsonProperty("playerID")]
        public string PlayerID { get; set; }
        [JsonProperty("lobbyID")]
        public string LobbyID { get; set; }
    }

1 Ответ

0 голосов
/ 06 апреля 2020

Действительно странное поведение ... но это было CORS. Как только я добавил CORS в свой Startup.cs, он заработал.

Остается загадкой, почему не было никаких исключений, никаких предупреждений в браузере, ответа OK с сервера и даже иногда правильного тела.

...