這幾天在做MusicStore項目的練習,但是當做到創建項目角色,來完成訪問頁面的不同權限的時候就出問題了,
不過剛剛已經解決了,先總結如下:
問題:
當創建一個項目的時候當然不希望所有的用戶都能任意訪問你的頁面,一般是后台的部分只有管理員才能訪問
那該如何設置這個管理員角色呢?打開項目點擊“項目”->“asp.net 配置”,自動打開瀏覽器,啟動網站
管理工具。
其實這個網絡管理工具就是一個圖形化的Web.config文件控制器,你的所有圖形化的操作會反應在項目的
web.config文件中。點擊"安全",里面有創建管理角色等功能,但是問題就是我的應用就是無法打開這個
“安全”選項。
解決:
接下來我開始一點點找問題的原因,我發現用網絡管理工具之所以能夠創建用戶,創建角色其實是調用項目
里面的數據庫文件,對其進行了一定的操作。但是MusicStore項目指導書里面並沒有詳細的提這一點,按
照上面的提示一步步做是行不通的。
我重新建了一個mvc3的項目,記得要建Internet項目,而不是empty。項目默認會創建一個asp.net數
據庫來保存個人帳號信息,然后再次啟用這個網絡管理工具,這是“安全”選項是好用的。
通過自己的項目跟新項目中web.config文件的對比我發現了一些不同之處。
我自己的項目的connectionstrings的name是MusicStoreEntities。但是程序
默認的數據庫連接會是DefaultConnection,而當使用網站管理工具創建角色、用戶
的是有他默認識別的時DefaultConnection,而不是MusicStoreEntities。
所以我的解決辦法是又添加了一個新的連接,通過新連接創建數據庫單獨來存放用戶信息。
<add name="DefaultConnection" providerName="System.Data.SqlClient"
connectionString="Data Source=(LocalDb)\v11.0;
Initial Catalog=aspnetDB;Integrated Security=SSPI;
AttachDBFilename=|DataDirectory|\aspnetDB.mdf" />。
這樣之后還是沒能解決問題,郁悶~
通過一番折騰,發現其實web.config里面的<profile> <membership> <roleManager>
<sessionState>這幾個節點是真正起作用的,每個節點里面都有一個<providers>子節點。
這是里面的connectionStringName屬性來指明我們的連接字符串的名字(DefaultConnection)
但是把這個(比如<profile>)節點它不是直接能調用<providers>子節點的
connectionStringName。而是通過一個defaultProvider屬性,屬性的值就是<providers>
節點的name值。這樣一折騰才會調用到connectionStringName繼而調用到DefaultConnection。
就拿<membership>來講,它的詳細代碼如下:
<membership defaultProvider="DefaultMembershipProvider"> <providers> <add connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> </providers> </membership>
我的錯誤就是忘記給<membership>節點加上defaultProvider屬性了。這一點完成之后,便能順利的
利用網站管理工具了。另外通過這個例子我還明白了為什么默認情況下保存帳號的數據庫里面會生成這么多
表呢,這些表都是哪些代碼作用生成的呢。(這下基本明吧了吧^_^)
是不是覺得很多表的名字其實與web.config里面的節點的名字是一一對應的啊。
好了,就到這了吧,希望也能對剛入手mvc的大家有所幫助。
^_^同為新手望多交流,新浪圍脖:@開拓者345