0

我正在开发一个使用表单身份验证并使用经典托管管道模式的旧网站。默认的 Membership.ApplicationName 是从 web.config 中读取的,并且可以在代码中进行更改以匹配应用程序名称,从而允许用户在不同的门户上登录。这在经典模式下工作正常,但在集成模式下 Membership.ApplicationName 为空且无法更改。如果它设置为应用程序名称,则该值保持为空。从 web.config 中可以很好地读取其他值

<membership defaultProvider="Database">
  <providers>        
    <add name="Database" 
         connectionStringName="SkylineMembership" 
         requiresQuestionAndAnswer="false" 
         applicationName="/" 
         type="Eprint.Skyline.Web.Pages.ApplicationProvider" 
         requiresUniqueEmail="false" 
         minRequiredPasswordLength="1" 
         minRequiredNonalphanumericCharacters="0" 
         passwordStrengthRegularExpression="" 
         maxInvalidPasswordAttempts="99" />
  </providers>
</membership>

例如,maxInvalidPasswordAttempts="99" 的默认值读取正常,但 applicationName 始终为 Null,即使在代码中设置为另一个值后仍保持为 Null。

设置应用程序名称的代码位于所有面向用户的页面上继承的 BasePade 上。例如 public partial class Login : BasePage' 网站代码使用 Code Behind,而不是 MVC

任何想法为什么我可以在使用经典模式时读取和设置 Membership.ApplicationName 而在使用集成模式时却不能?这让我困惑了几天。

4

1 回答 1

0

“问题”是由项目(Eprint.Skyline.Web.Pages.ApplicationProvider)中的代码执行不当引起的。在 web.config 中将类型更改为“System.Web.Security.SqlMembershipProvider”解决了问题

<membership defaultProvider="Database">
  <providers>        
    <clear />        
    <add name="Database" 
         connectionStringName="SkylineMembership" 
         requiresQuestionAndAnswer="false" 
         applicationName="/" 
         type="System.Web.Security.SqlMembershipProvider"
         requiresUniqueEmail="false" 
         minRequiredPasswordLength="1" 
         minRequiredNonalphanumericCharacters="0" 
         passwordStrengthRegularExpression="" 
         maxInvalidPasswordAttempts="99" />
  </providers>
</membership>

感谢@Lex Li 的提醒

于 2021-04-12T10:31:15.373 回答