Как получить ConnectionString, которую использует поставщик членства? - PullRequest
1 голос
/ 14 марта 2011

... а не читая его из файла конфигурации!Не выводить его из любого места, кроме как читать именно то, что сам провайдер членства использует.Назовите меня параноиком.

Первый доступ к данным в моем приложении - это доступ к поставщику членства.Подавляющее большинство проблем с подключением связано с тем, что приложение развертывается в стадии подготовки или производства со строкой подключения из разработки, поэтому я хотел бы изменить это:

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 />" );
}

Кажется таким очевидным, но каждая ссылка, которую я нахожу, инструктирует меня использовать ConfigurationManager, что я специально не хочу сделать.Хотя я допускаю, что это может быть моим единственным вариантом, и удовлетворительным в этом отношении.

Я совершенно готов согласиться с возможностью того, что мой вопрос наравне с этим:

int i;

try
{
    i = 42;
}

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

Если это так, пожалуйста, прокомментируйте соответственно.

Ответы [ 3 ]

1 голос
/ 14 марта 2011

Я не верю, что есть прямое свойство, которое вы можете использовать, которое даст вам информацию о соединении. Хотя вы могли бы сделать одну вещь - создать подкласс для выбранного вами провайдера членства и реализовать свои собственные свойства, чтобы предоставить вам информацию.

0 голосов
/ 11 августа 2014

Привет. Вот способ получить строку подключения от или по указанному имени поставщика (бывший поставщик 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();

}
  • Заменить 'Строка соединения' на другуюНепубличное имя поля Вы также можете получить доступ к его значению.
  • Заменив Provider (по умолчанию) на Membership.Providers ["Name_Of_Your_Provider"], вы также можете получить строку подключения.
0 голосов
/ 14 марта 2011

Обычно считается плохой идеей отображать строки подключения в пользовательском интерфейсе (т. Е. Плохая безопасность), поэтому вы не найдете легкодоступных свойств для передачи значения из классов, которые считали его из файла конфигурации.

Возможно, вы захотите рассмотреть устранение основной причины проблемы, связанной с развертыванием. Эта проблема легко решается с помощью различных файлов конфигурации для разработки, подготовки и производства. Visual Studio имеет встроенную поддержку для автоматического управления развертыванием соответствующего файла конфигурации. Полная информация здесь:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...