我有一个简单的CLI应用程序来创建/更新/删除SqlMembershipProvider的用户。它有效,我可以从CLI应用程序验证 。
但是,一旦我尝试从相关的asp.net应用程序执行此操作,它就会失败。我确实复制/粘贴了相关的web.conf / app.config部分,所以我不知道它为什么会失败。
<machineKey validationKey="C94FA3782AAF21E932CAA92DC2A0641951E3A76E50DD25B19C627BA01E259C6CBC7839A7803A59EF3BF855152369A6AB10CC259513BE7ACA4E842B962FD1D8A4"
decryptionKey="2EA6D270AD94361ECFDCED5070D76FD67D9A147FEEBC8388FE9B73B450A04560"
validation="SHA1"
decryption="AES" />
<membership defaultProvider="MembershipProvider">
<providers>
<add name="MembershipProvider" type="System.Web.Security.SqlMembershipProvider"
connectionStringName="ApplicationServices"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="1"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""/>
</providers>
</membership>
这是在web.config和app.config中,有人可以解释为什么这会在CLI项目而不是asp.net项目中验证吗?
要明确的是,这里的代码不是validationg
Membership.ValidateUser("fake", "fake") // actual test un/pwd combo
我已经确认un / pwd实际上是正确的。
答案 0 :(得分:1)
在不了解有关您的应用程序的任何其他内容的情况下,最可能的问题似乎是配置文件中membership / providers / add节点中的applicationName属性。见http://msdn.microsoft.com/en-us/library/system.web.security.membership.applicationname.aspx
这些应用程序可能默认为单独的应用程序名称/标识符。因此,当您尝试通过Web应用程序登录时,提供程序仅会看到授予CLI应用程序的访问权限。 CLI应用程序可能无法访问Web根目录或虚拟路径信息(没有http上下文)来创建默认名称,因此它可能默认为与您的Web应用程序applicationName不同的内容。
您可以通过两种方式处理此问题:
OR
以下是有人在asp.net应用程序之外使用SqlMembershipProvider的另一个参考:http://mdrasel.wordpress.com/2011/02/01/asp-net-membership-provider-outside-of-web-application/。请注意applicationName属性的使用。