我有一个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
答案 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调用它们吗?