配置错误指定的ASP.NET密码格式无效

时间:2010-04-27 20:31:40

标签: c# asp.net visual-studio-2008 sql-server-2008

当我浏览我的C#/ SQL Web应用程序时,我现在在IIS 6.0中收到上述错误。这是在VS 2008和SS 2008中在32位XP操作系统上构建的。在我向其添加Login控件之前,应用程序正在运行。但是,这是我第一次配置登录/密码控件,所以我可能遗漏了一些非常基本的东西。

在我尝试登录之前不会发生此错误。以下是我在IIS中出错的详细信息;我在VS中得到了同样的错误:

Parser Error Message: Password format specified is invalid.

Source Error: 


Line 31:                  <add
Line 32:                    name="SqlProvider"
Line 33:                    type="System.Web.Security.SqlMembershipProvider"
Line 34:                    connectionStringName="AdventureWorksConnectionString2"
Line 35:                    applicationName="AddFileToSQL2"


Source File: C:\Inetpub\AddFileToSQL2\web.config    Line: 33

我的web.config的相关内容是:

  <connectionStrings>
    <add name="Master" connectionString="server=MSSQLSERVER;database=Master; Integrated Security=SSPI"
      providerName="System.Data.SqlClient" />
    <add name="AdventureWorksConnectionString" connectionString="Data Source=SIDEKICK;Initial Catalog=AdventureWorks;Integrated Security=True"
      providerName="System.Data.SqlClient" />
      <add name="AdventureWorksConnectionString2" connectionString="Data Source=SIDEKICK;Initial Catalog=AdventureWorks;Integrated Security=True; "
  providerName="System.Data.SqlClient" />
  </connectionStrings>
      <system.web>

          <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
              <providers>
                  <clear />
                  <add
                    name="SqlProvider"
                    type="System.Web.Security.SqlMembershipProvider"
                    connectionStringName="AdventureWorksConnectionString2"
                    applicationName="AddFileToSQL2"
                    enablePasswordRetrieval="false"
                    enablePasswordReset="true"
                    requiresQuestionAndAnswer="true"
                    requiresUniqueEmail="false"
                    passwordFormat="encrypted" />
              </providers>
          </membership>
          <!-- 
            Set compilation debug="true" to insert debugging 
            symbols into the compiled page. Because this 
            affects performance, set this value to true only 
            during development.
        -->
        <roleManager enabled="true" />
  <compilation debug="true">
            <assemblies>
                <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            </assemblies>
        </compilation>
        <!--
            The <authentication> section enables configuration 
            of the security authentication mode used by 
            ASP.NET to identify an incoming user. 
        -->
          <authentication mode="Forms">
              <forms loginUrl="Password.aspx"
                     protection="All"
                     timeout="30"
                     name="SqlAuthCookie"
                     path="/FormsAuth"
                     requireSSL="false"
                     slidingExpiration="true"
                     defaultUrl="default.aspx"
                     cookieless="UseCookies"
                     enableCrossAppRedirects="false" />
          </authentication>

          <!--Authorization permits only authenticated users to access the application -->
          <authorization>
              <deny users="?" />
              <allow users="*" />
          </authorization>

          <!--
            The <customErrors> section enables configuration 
            of what to do if/when an unhandled error occurs 
            during the execution of a request. Specifically, 
            it enables developers to configure html error pages 
            to be displayed in place of a error stack trace.

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        -->
        <pages>
            <controls>
                <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            </controls>
        </pages>
        <httpHandlers>
            <remove verb="*" path="*.asmx"/>
            <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
    </httpHandlers>
        <httpModules>
            <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </httpModules>
    </system.web>

    <system.codedom>
        <compilers>
            <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                <providerOption name="CompilerVersion" value="v3.5"/>
                <providerOption name="WarnAsError" value="false"/>
            </compiler>
        </compilers>
    </system.codedom>
    <!-- 
        The system.webServer section is required for running ASP.NET AJAX under Internet
        Information Services 7.0.  It is not necessary for previous version of IIS.
    -->
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
        <modules>
            <remove name="ScriptModule"/>
            <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </modules>
        <handlers>
            <remove name="WebServiceHandlerFactory-Integrated"/>
            <remove name="ScriptHandlerFactory"/>
            <remove name="ScriptHandlerFactoryAppServices"/>
            <remove name="ScriptResource"/>
            <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </handlers>
    </system.webServer>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
                <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
                <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
      <system.net>
           <mailSettings>
                <smtp from="noreply@SIDEKICK.com">
                     <network host="SIDEKICK" password="" userName="" />
                </smtp>
           </mailSettings>
      </system.net>
</configuration>

我检查过,我的SSMS中有一个aspnetdb数据库。网络服务帐户具有对此数据库的SELECT,EXECUTE,INSERT,UPDATE访问权限。但我看到的一个问题是这个数据库中的所有表都是空的,除了aspnet_SchemaVersions,它只有2条记录(通用和成员)。这是正确的吗?

我通过ASP.NET配置向导添加了用户和角色,我相信自从我在http://msdn.microsoft.com/en-us/library/ms998347.aspx上遵循Microsoft教程后我已正确设置了这一点。

我从VS看到的另一个问题是在我的初始登录Password.aspx.cs文件中向我的Page_Load添加内容后,我在下面遇到了无效的强制转换问题。我也搜索了这个问题,但我看到的解决方案让我更加困惑。我添加的Page_Load部分是:

protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("Hello, " + Server.HtmlEncode(User.Identity.Name));

            FormsIdentity id = (FormsIdentity)User.Identity;
            FormsAuthenticationTicket ticket = id.Ticket;

            Response.Write("<p/>TicketName: " + ticket.Name);
            Response.Write("<br/>Cookie Path: " + ticket.CookiePath);
            Response.Write("<br/>Ticket Expiration: " +
                            ticket.Expiration.ToString());
            Response.Write("<br/>Expired: " + ticket.Expired.ToString());
            Response.Write("<br/>Persistent: " + ticket.IsPersistent.ToString());
            Response.Write("<br/>IssueDate: " + ticket.IssueDate.ToString());
            Response.Write("<br/>UserData: " + ticket.UserData);
            Response.Write("<br/>Version: " + ticket.Version.ToString());

       }

我得到的VS异常:

System.InvalidCastException was unhandled by user code
  Message="Unable to cast object of type 'System.Security.Principal.GenericIdentity' to type 'System.Web.Security.FormsIdentity'."
  Source="AddFileToSQL"
  StackTrace:
       at AddFileToSQL.Password.Page_Load(Object sender, EventArgs e) in C:\Documents and Settings\Admin\My Documents\Visual Studio 2008\Projects\AddFileToSQL2\AddFileToSQL\Password.aspx.cs:line 22
       at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
       at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
       at System.Web.UI.Control.OnLoad(EventArgs e)
       at System.Web.UI.Control.LoadRecursive()
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  InnerException: 

2 个答案:

答案 0 :(得分:1)

这应该只允许授权用户正确吗?如果是这样,请更改此

 <authorization>
              <deny users="?" />
              <allow users="*" />
          </authorization>

 <authorization>
              <deny users="?" />
          </authorization>

此外,您正在尝试使用集成身份验证从IIS连接到SQL。你可能不想这样做。指定要使用的用户名和密码。

http://www.connectionstrings.com/sql-server-2008

答案 1 :(得分:1)

当我遇到此错误时,它是由passwordFormat的值区分大小写引起的。

了passwordFormat = “加密的”

将更好地工作

了passwordFormat = “加密”