Как я могу настроить поставщиков членства ASP.NET через код?

Я заметил, что вы используете «рабочий процесс» в вашем примере параметра [ref]. Для простоты давайте назовем это «функцией» и вернемся к «рабочему процессу» позже.

В коде необходимо изменить три вещи:

  1. При передаче параметра [ref] в функцию необходимо заключить этот параметр в скобки ().
  2. При использовании параметра [ref] внутри функции обращайтесь к $ variable.value
  3. Удалите тип [string] из определения вашего параметра. Это может быть [строка] или [ссылка], но не оба одновременно.

Вот код, который работает:

function Test
{
    Param([Parameter(Mandatory=$true)][ref]$someString)

    write-verbose $someString.value -Verbose
    $someString.value = "this is the new string"
}
cls
$someString = "hi"
Test -someString ([ref]$someString)
write-host $someString

Что касается «рабочих процессов». Они очень ограничены, прочитайте Рабочие процессы PowerShell: ограничения . В частности, вы не можете вызвать метод для объекта в рабочем процессе. Это сломает черту:

$someString.value = "this is the new string"

Я не думаю, что использование параметров [ref] в рабочем процессе практично из-за ограничений рабочего процесса.

6
задан Samuel Jack 22 June 2009 в 08:28
поделиться

2 ответа

Хорошо, следуя решению, которое они тут придумали: http://forums.asp.net /p/997608/2209437.aspx

Я создал класс, который в конструкторе без параметров (который вам нужен) просто получает сервер и порт из аргументов командной строки. Таким образом, я могу пойти "MembershipInitializer.exe" SomeSqlServer \ Instance "51000.

public class CustomSQLMembershipProvider : SqlMembershipProvider {
  private readonly string _server;
  private readonly string _port;

  /// <summary>
  /// Initializes a new instance of the <see cref="T:System.Web.Security.SqlMembershipProvider"/> class.
  /// </summary>
  public CustomSQLMembershipProvider() {
    string[] args = System.Environment.GetCommandLineArgs();
    // args[0] is the exe name
    _server = args[1];
    _port = args[2];
  }

  public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
  {
    base.Initialize(name, config);

    // Update the private connection string field in the base class.
    string connectionString = string.Format(@"Data Source={0},{1};Initial Catalog=aspnetdb;UID=NICCAMembership;PWD=_Password1;Application Name=NICCA;Connect Timeout=120;", _server, _port);

    // Set private property of Membership provider.
    FieldInfo connectionStringField = GetType().BaseType.GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic);
    connectionStringField.SetValue(this, connectionString);
  }
}

В app.config вашего консольного приложения (или приложения Windows)

<configuration>
 <connectionStrings>
  <clear/>
  <add name="MembershipDB"
    connectionString="Some Bogus String here that gets overrided in the custom class" 
    providerName="System.Data.SqlClient"/>
 </connectionStrings>
 <system.web>
  <authentication mode="Forms"/>
  <authorization>
   <deny users="?"/>
  </authorization>
  <membership>
   <providers>
    <remove name="AspNetSqlMembershipProvider"/>
    <add name="AspNetSqlMembershipProvider" 
      connectionStringName="MembershipDB" 
      applicationName="NICCA" 
      type="MyInitializeMembershipDB.CustomSQLMembershipProvider, MyInitializeMembershipDB" 
      requiresUniqueEmail="false" 
      requiresQuestionAndAnswer="false"/>
   </providers>
  </membership>
 </system.web>
</configuration>

Если вам также нужен бит поставщика ролей, вы вероятно, придется переопределить SqlRoleProvider примерно таким же образом.

Если вы создаете программу для автоматической инициализации базы данных членства в определенном состоянии на основе, но адрес сервера sql и имя порта неизвестны, пока кто-то не введет их в установку волшебник, это поможет ..

7
ответ дан 17 December 2019 в 02:32
поделиться

Membership.ApplicationName = "yourfbaApplicationame"; Пользователь MembershipUser = Membership.CreateUser ("admin," пароль "," emaiol@g.com ");

и Убедитесь, что у вас есть следующие записи в файле конфигурации.

 <connectionStrings>
<add connectionString="server=sqd01-1-cll;database=FBA;Integrated Security=SSPI;"  name="FBASqlConnString" providerName="System.Data.SqlClient"/>

Если вы все еще хотите использовать полный код и не нужно использовать файл конфигурации. Используйте приведенный ниже

SqlMembershipProvider ObjSqlMembershipProvider = new SqlMembershipProvider();
            SqlRoleProvider ObjSqlRoleProvider = new SqlRoleProvider();
            NameValueCollection ObjNameValueCollRole = new NameValueCollection();
            NameValueCollection ObjNameValueCollMembership = new NameValueCollection();
            MembershipCreateStatus enMembershipCreateStatus;

                ObjNameValueCollMembership.Add("connectionStringName", "Connection String Name");
                ObjNameValueCollMembership.Add("applicationName", "ApplicatioNAme");

                //these items are assumed to be Default and dont care..Should be given a look later stage.
                ObjNameValueCollMembership.Add("enablePasswordRetrieval", "false");
                ObjNameValueCollMembership.Add("enablePasswordReset", "false");
                ObjNameValueCollMembership.Add("requiresQuestionAndAnswer", "false");
                ObjNameValueCollMembership.Add("requiresUniqueEmail", "false");
                ObjNameValueCollMembership.Add("passwordFormat", "Hashed");
                ObjNameValueCollMembership.Add("maxInvalidPasswordAttempts", "5");
                ObjNameValueCollMembership.Add("minRequiredPasswordLength", "1");
                ObjNameValueCollMembership.Add("minRequiredNonalphanumericCharacters", "0");
                ObjNameValueCollMembership.Add("passwordAttemptWindow", "10");
                ObjNameValueCollMembership.Add("passwordStrengthRegularExpression", "");

                //hard coded the Provider Name,This function just need one that is present. I tried other names and it throws error. I found this using Reflector ..all the rest are take care by the above
                //name value pairs
                ObjSqlMembershipProvider.Initialize("AspNetSqlMembershipProvider", ObjNameValueCollMembership);MembershipUser user = ObjSqlMembershipProvider.CreateUser("admin,"password","emaiol@g.com");         

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

-1
ответ дан 17 December 2019 в 02:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: