1

我試圖創建一個新的MVC 4互聯網網站使用VS2012中提供的互聯網模板。我能夠爲該網站註冊用戶併成功登錄和註銷。我可以看到SimpleMembership創造了5桌(用戶配置,webpages_Membership,webpages_OAuthMembership,webpages_Roles,webpages_UsersInRoles)和我通過網站創建的登錄已投入正確的地方(我希望他們反正正確的!)Roles.GetRolesForUser();似乎沒有在MVC 4

我遇到的問題是用戶的角色。首先,我似乎無法使用舊的ASP.NET配置頁面 - 它需要永久加載,然後當它最終會在您點擊安全鏈接時出現此錯誤:

有一個您所選數據存儲的問題。這可能是由於無效的服務器名稱或憑據,或者權限不足造成的。它也可能是由角色管理器功能未啓用引起的。點擊下面的按鈕將被重定向到您可以選擇新數據存儲的頁面。

以下消息可能有助於診斷問題:無法連接到SQL Server數據庫。

,當你嘗試做提供商配置

無法建立與數據庫的連接此錯誤。 如果尚未創建SQL Server數據庫,請退出Web站點管理工具,使用aspnet_regsql命令行實用程序創建和配置數據庫,然後返回到此工具以設置提供程序。

我試着運行aspnet_regsql,它創建了舊的樣式成員表,並沿着網站在註冊我的第一個用戶時創建的新樣式成員表。

所以爲了解決這個問題,就創建角色而言,我自己把一個角色放到數據庫中,並把用戶放到角色中。現在運行該網站,我無法使用Roles.GetRolesForUser(),因爲它也會在調試時顯示「無法連接到SQL Server數據庫」(並且YOD給出一個空引用異常)。

我在web.config中注意到,不再有關於會員/角色提供商等部分曾經是存在(例如,如果你讓一個MVC 3 Internet應用程序)

我一直在尋找答案的天有誰能說出我可能做錯了什麼?

這裏是我的web.config(帶連接字符串刪除)

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=169433 
    --> 
<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    <sectionGroup name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection, DotNetOpenAuth.Core"> 
     <section name="messaging" type="DotNetOpenAuth.Configuration.MessagingElement, DotNetOpenAuth.Core" requirePermission="false" allowLocation="true" /> 
     <section name="reporting" type="DotNetOpenAuth.Configuration.ReportingElement, DotNetOpenAuth.Core" requirePermission="false" allowLocation="true" /> 
     <section name="oauth" type="DotNetOpenAuth.Configuration.OAuthElement, DotNetOpenAuth.OAuth" requirePermission="false" allowLocation="true" /> 
     <section name="openid" type="DotNetOpenAuth.Configuration.OpenIdElement, DotNetOpenAuth.OpenId" requirePermission="false" allowLocation="true" /> 
    </sectionGroup> 
    </configSections> 
    <connectionStrings> 
    <add name="DefaultConnection" connectionString="Data Source=.;Initial Catalog=EnvoyBilling;Integrated Security=True;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" /> 
    <add name="EnvoyBillingContext" connectionString="xxx" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <appSettings> 
    <add key="webpages:Version" value="2.0.0.0" /> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="PreserveLoginUrl" value="true" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    <add key="enableSimpleMembership" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" timeout="2880" /> 
    </authentication> 
    <pages> 
     <namespaces> 
     <add namespace="System.Web.Helpers" /> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Optimization" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="System.Web.WebPages" /> 
     </namespaces> 
    </pages> 
    </system.web> 
    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    </system.webServer> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    <legacyHMACWarning enabled="0" /> 
    </runtime> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 
    <system.net> 
    <defaultProxy enabled="true" /> 
    <settings> 
     <!-- This setting causes .NET to check certificate revocation lists (CRL) 
       before trusting HTTPS certificates. But this setting tends to not 
       be allowed in shared hosting environments. --> 
     <!--<servicePointManager checkCertificateRevocationList="true"/>--> 
    </settings> 
    </system.net> 
    <dotNetOpenAuth> 
    <messaging> 
     <untrustedWebRequest> 
     <whitelistHosts> 
      <!-- Uncomment to enable communication with localhost (should generally not activate in production!) --> 
      <!--<add name="localhost" />--> 
     </whitelistHosts> 
     </untrustedWebRequest> 
    </messaging> 
    <!-- Allow DotNetOpenAuth to publish usage statistics to library authors to improve the library. --> 
    <reporting enabled="true" /> 
    <openid> 
     <relyingParty> 
     <security requireSsl="false"> 
      <!-- Uncomment the trustedProviders tag if your relying party should only accept positive assertions from a closed set of OpenID Providers. --> 
      <!--<trustedProviders rejectAssertionsFromUntrustedProviders="true"> 
         <add endpoint="https://www.google.com/accounts/o8/ud" /> 
        </trustedProviders>--> 
     </security> 
     <behaviors> 
      <!-- The following OPTIONAL behavior allows RPs to use SREG only, but be compatible 
         with OPs that use Attribute Exchange (in various formats). --> 
      <add type="DotNetOpenAuth.OpenId.RelyingParty.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth.OpenId.RelyingParty" /> 
     </behaviors> 
     </relyingParty> 
    </openid> 
    </dotNetOpenAuth> 
    <uri> 
    <!-- The uri section is necessary to turn on .NET 3.5 support for IDN (international domain names), 
      which is necessary for OpenID urls with unicode characters in the domain/host name. 
      It is also required to put the Uri class into RFC 3986 escaping mode, which OpenID and OAuth require. --> 
    <idn enabled="All" /> 
    <iriParsing enabled="true" /> 
    </uri> 
</configuration> 
+0

你可以發佈你的web.config? – VJAI

+0

嗨@Mark,我已經添加了web.config(減去connectionString細節) - 我希望它可以幫助你找出我的問題! – Bindi

回答

1

你應該設置的成員資格和角色提供在web.config中。

<system.web> 
    <roleManager enabled="true"> 
     <providers> 
      <clear/> 
      <add name="AspNetSqlRoleProvider" connectionStringName="MyAspNetDB" 
       applicationName="/SampleRolesApp" 
       type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
     </providers> 
    </roleManager> 
    <membership> 
     <providers> 
      <clear/> 
      <add name="AspNetSqlMembershipProvider" 
       connectionStringName="MyAspNetDB" 
       enablePasswordRetrieval="false" 
       enablePasswordReset="true" 
       requiresQuestionAndAnswer="true" 
       applicationName="/SamplesRolesApp" 
       requiresUniqueEmail="false" 
       passwordFormat="Hashed" 
       maxInvalidPasswordAttempts="5" 
       minRequiredPasswordLength="7" 
       minRequiredNonalphanumericCharacters="1" 
       passwordAttemptWindow="10" 
       passwordStrengthRegularExpression=""      
       type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
     </providers> 
    </membership> 

    ... 
    </system.web> 

欲瞭解更多信息,請檢查該post

+0

嗨馬克,感謝您的迴應,但它並沒有真正幫助我。 SimpleMembership不使用這些web.config位。 – Bindi