mysql - 每第二次命中获得 "Access denied for user..."

标签 mysql asp.net-core dapper asp.net-core-1.0

我正在尝试在 .net core 1.0 中将 dapper 与 mysql 结合使用。我正在使用这个 mysql 连接器:https://github.com/bgrainger/MySqlConnector

我知道连接器处于 alpha 阶段,但我想知道在将它与 dapper 一起使用时是否有人遇到过类似的问题。

这是我的简单模型:

        public List<GeneralModel> GetAllLists()
        {
            try
            {
                using (DbConnection connection = new MySqlConnection("Server=localhost;Database=lists;Uid=Unnamed;Pwd=lol;"))
                {
                    return connection.Query<GeneralModel>("SELECT * FROM lists.general").ToList();
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

这是 Controller :

    public IActionResult Index()
    {
        GeneralModel GenRepo = new GeneralModel();
        return View(GenRepo.GetAllLists());
    }

当我第一次进入索引页面时,它起作用了。如果我刷新,我会收到“用户访问被拒绝...”。我不知道是什么导致了错误。我认为问题不在我的代码中。

编辑:

我猜问题出在连接器上,因为这在刷新后也会返回错误:

            List<GeneralModel> lists = new List<GeneralModel>();
            using (DbConnection connection = new MySqlConnection("Server=localhost;Database=lists;Uid=Unnamed;Pwd=lol;"))
            {
                using (DbCommand myCommand = connection.CreateCommand())
                {
                    myCommand.CommandText = "SELECT * FROM lists.general";

                    connection.Open();
                    using (DbDataReader myReader = myCommand.ExecuteReader())
                    {
                        while (myReader.Read())
                        {
                            GeneralModel tmpGen = new GeneralModel();
                            tmpGen.name = myReader["name"].ToString();
                            tmpGen.description = myReader["description"].ToString();
                            tmpGen.language = myReader["language "].ToString();

                            lists.Add(tmpGen);
                        }
                    }
                    connection.Close();
                }
            }
            return lists;

最佳答案

此错误是由 MySqlConnector 引起的没有正确处理 COM_CHANGE_USER packet 的快速路径.

MySQL 服务器(版本 5.6 和 5.7)似乎不会立即接受用户的凭据,但总是返回 Authentication Method Switch Request Packet . MariaDB(您正在使用)确实实现了快速路径并立即返回一个 OK 数据包。

连接器现已更新以处理此响应,并且应该停止抛出虚假的“拒绝访问”异常。 fix0.1.0-alpha09 .

关于mysql - 每第二次命中获得 "Access denied for user...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38362581/

相关文章:

php - 如何使用数组更新

php - mysql中where子句查询多列

.net - .net core 2.0 中的持久身份验证 cookie

asp.net-identity - Microsoft.AspNet.Identity 3 中 ClaimsAuthorizationAttribute 的等效项

c# - 我怎样才能让我的 dapper 结果成为一个列表?

不同环境下的 PHP session 问题

c# - 服务器端 .NET Core 中的 Session.SetString() 产生错误 "The session cannot be established after the response has started"

orm - 为嵌套对象编写Dapper查询

postgresql - 使用 postgresql 的 AsyncQuery 和使用 npqsql 的 dapper

mysql - 在 SELECT … INNER JOIN … FOR UPDATE 的情况下,字符串的顺序会被锁定,以及如何避免死锁?