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

时间:2017-07-31 08:32:28

标签: c# rest

我有一个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 个答案:

答案 0 :(得分: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

是的,这非常不安全。

答案 1 :(得分:2)

带来HttpUtility和UrlEncode参数。

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

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