2017-07-31 79 views
0

我有一個asp.net web api,我需要從數據庫中獲取電子郵件列表。我需要傳遞數據庫連接字符串作爲參數。我知道這樣傳遞連接字符串是不安全的,但這就是要求。每當我傳入連接字符串,Rest客戶端都會給我404 - Not Found。但是我在數據庫類中設置了連接字符串,它正在工作。那麼我怎樣才能將連接作爲字符串傳遞並使其從數據庫中檢索電子郵件?如何使用GET傳遞連接字符串作爲參數?

代碼從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

您是否嘗試從連接字符串中刪除所有空格字符? –

+0

@KobyDouek是的。仍然給出相同的錯誤 – batwing

+0

您是否嘗試從連接字符串中刪除'http:// localhost:59547/api/EmailContacts /'部分?那個有什麼用? –

回答

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的應用程序設置中有什麼問題?

如果可能存在多個連接字符串,可以將它們存儲在共享數據庫中,並通過傳遞Guid作爲Api參數來調用它們。

相關問題