Как на самом деле работает атрибут applicationName? - PullRequest
0 голосов
/ 20 декабря 2010

Мне просто интересно

, почему команда asp.net выбрала / в качестве значения по умолчанию имени приложения Членской роли, а не имя проекта, которое имеет смысл?

Кроме того, приложение не может быть развернуто как корневое приложение.Это означает, что / больше не подходит.

Редактировать 1:

Например: сначала я создаю проект A и развертываю его.Позже я создам еще один проект B и разверну его.Если в обоих проектах используется значение по умолчанию, они все еще работают, но будет сложно определить, какие пользователи приходят из каждого проекта.

Для меня лучше, если по умолчанию установлено имя проекта.

Редактировать 2:

Я говорю об атрибуте applicationName, сгенерированном Visual Studio в Web.config.Почему бы не использовать имя проекта вместо / по умолчанию?

<membership>
      <providers>
        <clear />
        <add name="AspNetSqlMembershipProvider"
             type="System.Web.Security.SqlMembershipProvider"
             connectionStringName="ApplicationServices"
             enablePasswordRetrieval="false"
             enablePasswordReset="true"
             requiresQuestionAndAnswer="false"
             requiresUniqueEmail="false"
             maxInvalidPasswordAttempts="5"
             minRequiredPasswordLength="6"
             minRequiredNonalphanumericCharacters="0"
             passwordAttemptWindow="10"
             applicationName="/" />
      </providers>
    </membership>
    <profile>
      <providers>
        <clear />
        <add name="AspNetSqlProfileProvider"
             type="System.Web.Profile.SqlProfileProvider"
             connectionStringName="ApplicationServices"
             applicationName="/" />
      </providers>
    </profile>
    <roleManager enabled="false">
      <providers>
        <clear />
        <add name="AspNetSqlRoleProvider"
             type="System.Web.Security.SqlRoleProvider"
             connectionStringName="ApplicationServices"
             applicationName="/" />
        <add name="AspNetWindowsTokenRoleProvider"
             type="System.Web.Security.WindowsTokenRoleProvider"
             applicationName="/" />
      </providers>

</roleManager>

РЕДАКТИРОВАТЬ 3:

После создания двух приложений (т. Е. Одно в качестве корневого идругое как дочернее приложение), и оба имеют одинаковое имя-приложения, установленное на /, оба приложения используют один и тот же идентификатор приложения.Это означает, что косая черта не имеет ничего общего с деревом доменов сайта.Моя путаница была решена.Итак ... почему Visual Studio по умолчанию установил его в / (что меня смущает)?

РЕДАКТИРОВАТЬ 4:

У меня есть два приложения.Один в качестве корневого приложения, а другой в качестве дополнительного приложения в первом.Оба используют applicationName = "/".Я получил результат в базе данных следующим образом: Так что означает /?Если не имеет значения, почему VS выбрал это запутанное имя, а не имя проекта?

alt text

РЕДАКТИРОВАТЬ 5:

Из этого article , я сделаю сводку:

  1. Если мы удалим атрибут applicationName из web.config для обоих приложений, ApplicationName, сгенерированный в базе данных для корня, будет "/", аApplicationName, сгенерированное в базе данных для дополнительного приложения, будет иметь вид "/subappvirtualdir".
  2. Если мы оставим для applicationName значение по умолчанию" / "для обоих приложений, и корневое приложение, и дополнительное приложение получат одинаковое ApplicatonName"/" генерируется в базе данных.
  3. Если мы изменим applicationName на «любое имя, которое вы хотите» для обоих приложений, для ApplicationName, сгенерированного в базе данных, будет установлено «любое имя, которое вы хотите» для обоих приложений.

Спасибо Rockin за ссылку выше!

Ответы [ 2 ]

2 голосов
/ 20 декабря 2010

Приложение обычно не знает и не заботится о том, из какого «проекта» оно пришло.Таким образом, этот контекст, вероятно, не будет присутствовать.

И если ваше приложение не находится в корне, то переименуйте его ...

2 голосов
/ 20 декабря 2010

Я бы сказал, что по умолчанию используется имя /, поскольку ваша БД не должна ничего знать о вашем приложении.Поэтому он не знает название проекта.У них должна быть какая-то отправная точка, и, поскольку они не читатели разума, вы получаете /.

Помните, поскольку вы можете использовать Aspnet_regsql.exe для создания вашей схемы членства ASP.NET в вашей базе данных, полностью независимой от Visual Studio, база данных не может просто "исправить" имя приложениявсе по своему.Конечно, вы можете редактировать имя приложения в базе данных сразу после создания БД, тогда это уже не имеет значения.

РЕДАКТИРОВАТЬ

В ваших изменениях я вижу, что вы говорите оapplicationName в web.config, а не тот, что в базе данных.Пожалуйста, прочитайте эту статью в блоге (не мою), чтобы узнать больше
http://dotnettipoftheday.org/tips/applicationName_attribute.aspx

...