首页 文章

如何使用GET将连接字符串作为参数传递?

提问于
浏览
0

我有一个asp.net web api,我需要从数据库中获取电子邮件列表 . 我需要将数据库连接字符串作为参数传递 . 我知道传递连接字符串是不安全的,但这是必需的 . 每当我传入连接字符串时,Rest客户端都会给我404 - Not Found . 但我在数据库类中设置连接字符串,它正在工作 . 那么如何将连接作为字符串传递并使其从数据库中检索电子邮件?

从db检索数据的代码

public List<EmailContacts> getEmailContacts(string connstr)
    {
        List<EmailContacts> emailList = new List<EmailContacts>();

        MySqlDataReader rdr = null;
        MySqlConnection myconn = new MySqlConnection(connstr);
        String sqlstr = "SELECT * FROM emailcontacts";
        MySqlCommand cmd = new MySqlCommand(sqlstr, myconn);
        myconn.Open();
        rdr = cmd.ExecuteReader();
        while (rdr.Read())
        {
            EmailContacts e = new EmailContacts();
            e.Id = rdr.GetInt32(0);
            e.Name = rdr.GetString(1);
            e.Email = rdr.GetString(2);

            emailList.Add(e);
        }
        rdr.Close();
        myconn.Close();
        myconn.Dispose();
        return emailList;
    }

得到Api

[HttpGet]
    [Route("api/EmailContacts/{connstr}")]
    public List<EmailContacts> Get(string connstr)
    {
        SalesDBConn db = new SalesDBConn();
        return db.getEmailContacts(connstr);
    }

这就是我尝试在其余客户端中传递连接字符串的方法

http://localhost:59547/api/EmailContacts/server = example.com; uid = myusername; pwd = mypassword; database = mydb_example

2 回答

  • 2

    你需要URL编码你的参数 . 你的要求应该是

    http://localhost:59547/api/EmailContacts/server%20%3D%20example.com%3B%20uid%20%3D%20myusername%3B%20pwd%20%3D%20mypassword%3B%20database%20%3D%20mydb_exampl
    

    是的,这非常不安全 .

  • 2

    引入HttpUtility和UrlEncode参数 .

    如果您的数据库是在线托管的,将来很容易受到攻击 . 将其存储在Api的应用程序设置中会出现什么问题?

    如果有多个连接字符串可能你可以将它们存储在Api的共享数据库中,并通过传递Guid作为Api参数来通过Id调用它们?

相关问题