我有一个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 回答
你需要URL编码你的参数 . 你的要求应该是
是的,这非常不安全 .
引入HttpUtility和UrlEncode参数 .
如果您的数据库是在线托管的,将来很容易受到攻击 . 将其存储在Api的应用程序设置中会出现什么问题?
如果有多个连接字符串可能你可以将它们存储在Api的共享数据库中,并通过传递Guid作为Api参数来通过Id调用它们?