【问题标题】:Unreliable response from action行动的不可靠反应
【发布时间】:2020-07-17 20:34:16
【问题描述】:

我正在制作 .Net Core 3.1 API,但响应不可靠。大多数时候它们是空白的,并且偶尔会按预期工作。我正在使用 NewtonsoftJson 并添加了 .AddNewtonsoftJson();到 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"}

意外结果是响应正文中的 Json 为 0B。

奇怪的是,它偶尔会起作用,而不是根本不起作用。这是我的 Firefox 开发者工具的网络标签。突出显示是正确的。

更新:我做了一个 mcve,但问题仍然存在。我使用 .NET Core 3.1 创建了一个 ASP.NET WebApi 项目并禁用了 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; }
    }

【问题讨论】:

  • 您的代码似乎没问题。可以发mcve吗?
  • 您所说的“仅偶尔工作”是什么意思?它在做什么,你在期待什么?
  • @Dmitry 我很快就会这样做。
  • @JonathanAlfaro 有时我会得到预期的结果,体内有一些 Json,但大多是空的 Json 内容
  • 你还没有解释你期望得到什么......请发布两个 Json 回复,以便我们看到你所看到的。还有什么是_lobbiers.InsertOne??

标签: c# asp.net json .net-core asp.net-core-webapi


【解决方案1】:

真的很奇怪的行为..但它是 CORS。一旦我将 CORS 添加到我的 Startup.cs 中,它就起作用了。

为什么没有异常,浏览器中没有警告,来自服务器的 OK 响应,甚至有时给出正确的正文,这仍然是一个谜。

【讨论】:

  • 并不奇怪,这不是解决方案。你没有说你试图从不同的来源拨打电话。禁用 CORS 保护无法解决 - 事实上,禁用 HTTPS 将使您的网站被每个浏览器标记。改为添加预期的来源、方法等。否则您的应用程序将受到攻击
  • 非常正确,将答案更改为删除sn-p,以免诱使用户复制它。我只是想说明 CORS 是问题所在。
猜你喜欢
  • 1970-01-01
  • 2013-08-26
  • 2017-02-14
  • 2012-04-01
  • 1970-01-01
  • 2013-10-14
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多