簡體   English   中英

如何獲取成員資格提供程序正在使用的ConnectionString?

[英]How to Get the ConnectionString that the Membership Provider is using?

...而不是從配置文件中讀取它! 除了確切地讀取成員資格提供程序本身正在使用的內容之外,也不能從其他任何地方進行推斷。 叫我偏執。

我的應用程序中的第一個數據訪問是對成員資格提供者的訪問。 絕大多數的連接問題都是將應用程序部署到具有開發中的連接字符串的階段或生產環境中,因此,我想對此進行更改:

MembershipUser me = Membership.GetUser();

對此:

MembershipUser me;

try
{
    me = Membership.GetUser();
}

catch ( SqlException E )
{
    Response.Write( "SQL Error " + E.Message + ".<br />" );
    Response.Write( "Connection String: " + Membership.Provider.WHAT? + "<br />" );
}

want to do. 似乎是那么明顯,但我每次找到參考指示我用ConfigurationManager ,這是我特別希望做的事。 盡管我承認這可能是我唯一的選擇,但對此還是令人滿意的。

我完全願意接受我的問題與此相提並論的可能性:

int i;

try
{
    i = 42;
}

catch ( Exception e )
{
    Response.Write( "Error assigning literal to integer." );    
}

在這種情況下,請相應地發表評論。

我不認為您可以使用直接屬性來提供連接信息。 不過,您可以做的一件事是將所選的成員資格提供程序子類化,並實現自己的屬性以提供信息。

嗨,這是一種從指定的提供程序名稱 MySQL提供程序) 獲取連接字符串或通過其獲取連接字符串的方法。

using MySql.Data.MySqlClient;
using MySql.Data;
using MySql.Web.Security;
using System.Collections.Specialized;
using System.Reflection;


void SomeFunction()
{

  Type t = Membership.Provider.GetType();
  FieldInfo fi = null;
  while (fi == null && t != null)
  {
       fi = t.GetField("connectionString", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
       t = t.BaseType;
  }

  MySql.Web.Security.MySQLMembershipProvider a =(MySql.Web.Security.MySQLMembershipProvider)Membership.Provider;

  string Connection_String_Value= fi.GetValue(a).ToString();

}
  • 通過將“ connectionString”替換為其他非公共字段名稱,您也可以訪問其值。
  • 通過用Membership.Providers [“ Name_Of_Your_Provider”]替換Provider(默認),您也可以獲得其連接字符串。

通常認為在UI中顯示連接字符串是個壞主意(即,安全性較差),這就是為什么您不會找到易於使用的屬性來傳遞從配置文件中讀取值的類中的值的原因。

您可能要考慮解決與部署相關的問題的根本原因。 通過使用不同的配置文件進行開發,登台和生產,可以輕松解決此問題。 Visual Studio具有內置支持,可以自動管理相應配置文件的部署。 詳細信息在這里:

http://blogs.msdn.com/b/webdevtools/archive/2009/05/04/web-deployment-web-config-transformation.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM