Как на самом деле работает атрибут applicationName?
Мне просто интересно
почему команда asp.net выбрала / в качестве значения по умолчанию имени приложения Membership Role, а не имени проекта, которое имеет смысл?
Кроме того, приложение может быть не развернуто в качестве корневого приложения. Это означает, что / больше не подходит.
Изменить 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:
После создания двух приложений (т. Е. Одного в качестве корневого, а другого в качестве дочернего приложения) и для обоих приложений одинаковое имя-приложения установлено в /, оба приложения используют один и тот же ApplicationID. Это означает, что косая черта не имеет ничего общего с деревом доменов сайта. На мою путаницу ответили. Итак... почему Visual Studio по умолчанию установил его в / (что меня смущает)?
РЕДАКТИРОВАТЬ 4:
У меня есть два приложения. Один в качестве корневого приложения, а другой в качестве дополнительного приложения в первом. Оба используют applicationName = "/". Я получил результат в базе данных следующим образом: Так что означает /? Если нет смысла, почему VS выбрал это запутанное имя, а не название проекта?
РЕДАКТИРОВАТЬ 5:
Из этой статьи я сделаю резюме:
- Если мы удалим атрибут applicationName из web.config для обоих приложений, ApplicationName, сгенерированный в базе данных для корня, будет "/", а ApplicationName, сгенерированный в базе данных для субприложения, будет "/subappvirtualdir".
- Если мы оставим для applicationName значение по умолчанию "/" для обоих приложений, и корневое приложение, и вспомогательное приложение получат одинаковое ApplicatonName "/", созданное в базе данных.
- Если мы изменим applicationName на "любое имя, которое вы хотите" для обоих приложений, для ApplicationName, сгенерированного в базе данных, будет установлено "любое имя, которое вы хотите" для обоих приложений.
Спасибо Rockin за ссылку выше!
2 ответа
Я бы сказал, что имя по умолчанию /
потому что ваша БД не должна ничего знать о вашем приложении. Поэтому он не знает название проекта. У них должна быть какая-то отправная точка, и, поскольку они не читают мысли, вы получаете /
,
Помните, поскольку вы можете использовать Aspnet_regsql.exe для создания вашей схемы членства ASP.NET в вашей базе данных, полностью независимой от Visual Studio, база данных не может просто "исправить" имя приложения самостоятельно. Конечно, вы можете редактировать имя приложения в базе данных сразу после создания базы данных, тогда это уже не имеет значения.
РЕДАКТИРОВАТЬ
В ваших изменениях я вижу, что вы говорите о applicationName в web.config, а не в базе данных. Пожалуйста, прочитайте эту статью в блоге (не мою), чтобы узнать больше
http://dotnettipoftheday.org/tips/applicationName_attribute.aspx
Приложение обычно не знает и не заботится о том, из какого "проекта" оно пришло. Таким образом, этот контекст, вероятно, не будет присутствовать.
И если ваше приложение не в корне, то переименуйте его...