มีProviderExceptionต่อไปนี้:
คุณลักษณะ Role Manager ไม่ได้เปิดใช้งาน
จนถึงตอนนี้ดีมาก
มีวิธีใดบ้างที่สามารถเรียกให้ตรวจสอบว่า Role Manager เปิดใช้งานหรือไม่
มีProviderExceptionต่อไปนี้:
คุณลักษณะ Role Manager ไม่ได้เปิดใช้งาน
จนถึงตอนนี้ดีมาก
มีวิธีใดบ้างที่สามารถเรียกให้ตรวจสอบว่า Role Manager เปิดใช้งานหรือไม่
คำตอบ:
คุณสามารถทำได้โดยอ่านจากคุณสมบัติบูลีนที่:
System.Web.Security.Roles.Enabled
นี่คือการอ่านโดยตรงจากenabled
แอตทริบิวต์ของroleManager
องค์ประกอบในweb.config
:
<configuration>
<system.web>
<roleManager enabled="true" />
</system.web>
</configuration>
อัปเดต:
สำหรับข้อมูลเพิ่มเติมลองดูตัวอย่าง MSDN นี้: https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx
roleManager
เปิดใช้งาน แต่ตอนนี้ฉันได้รับการยกเว้นUnable to connect to SQL Server database
หากคุณมาที่นี่เพราะคุณกำลังใช้สิ่งใหม่ASP.NET
Identity
UserManager
สิ่งที่คุณต้องการคือRoleManager
:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager
จะให้สิทธิ์การเข้าถึงแก่คุณเพื่อดูว่ามีบทบาทสร้าง ฯลฯ รวมถึงบทบาทที่สร้างขึ้นสำหรับ UserManager
ฉันพบข้อเสนอแนะ 2 ที่อื่นผ่านทาง Google ที่แนะนำ a) ตรวจสอบให้แน่ใจว่าการเชื่อมต่อฐานข้อมูลของคุณ (อันที่ใช้งานอยู่) ถูกต้องและกุญแจสำคัญในการสะกดถูกต้องและ b) ที่ตั้งค่าสถานะ Enabled บน RoleManager เป็นจริง หวังว่าหนึ่งในนั้นจะช่วย มันทำเพื่อฉัน
คุณลองตรวจสอบบทบาทเปิดใช้งานหรือไม่ นอกจากนี้คุณสามารถตรวจสอบ Roles.Providers เพื่อดูจำนวนผู้ให้บริการที่มีอยู่และคุณสามารถตรวจสอบ Roles.Provider สำหรับผู้ให้บริการเริ่มต้น ถ้ามันเป็นโมฆะก็ไม่มีสักอัน
ฉันพบคำถามนี้เนื่องจากข้อยกเว้นที่กล่าวถึงในนั้น Web.Config ของฉันไม่มี<roleManager>
แท็กใด ๆ ฉันรู้ว่าแม้ว่าฉันจะเพิ่ม (ตามInfotekka แนะนำ ) มันก็ลงเอยด้วยการยกเว้นฐานข้อมูล หลังจากทำตามคำแนะนำในคำตอบอื่น ๆ ที่นี่ไม่มีใครแก้ปัญหาได้อย่างสมบูรณ์
เนื่องจากแท็ก Web.Config เหล่านี้สามารถสร้างขึ้นได้โดยอัตโนมัติจึงรู้สึกผิดที่จะแก้ไขด้วยการเพิ่มแท็กด้วยตนเอง หากคุณอยู่ในกรณีที่คล้ายกันให้ยกเลิกการเปลี่ยนแปลงทั้งหมดที่คุณทำกับ Web.Config และ Visual Studio:
ตรวจสอบ Web.config ของคุณและตอนนี้คุณควรมีอย่างน้อยหนึ่ง<providers>
แท็กในโปรไฟล์ , สมาชิก , แท็กSessionStateและภายในแท็กRoleManagerใหม่เช่นนี้:
<roleManager defaultProvider="DefaultRoleProvider">
<providers>
<add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=NUMBER" connectionStringName="DefaultConnection" applicationName="/" />
</providers>
</roleManager>
เพิ่มenabled="true"
เช่น:
<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
กด F6เพื่อสร้างและตอนนี้มันควรจะตกลงเพื่อดำเนินการปรับปรุงฐานข้อมูลโดยไม่ต้องมีข้อยกเว้น:
update-database -verbose
และเมธอด Seed จะทำงานได้ดี (ถ้าคุณไม่ได้ยุ่งที่อื่น) และสร้างตารางในฐานข้อมูลของคุณหากคุณกำลังใช้ASP.NET Identity UserManager
คุณสามารถได้รับเช่นนี้เช่นกัน:
var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roles = userManager.GetRoles(User.Identity.GetUserId());
หากคุณเปลี่ยนคีย์สำหรับผู้ใช้จาก Guid เป็น Int เช่นใช้รหัสนี้:
var roles = userManager.GetRoles(User.Identity.GetUserId<int>());
<roleManager
enabled="true"
cacheRolesInCookie="false"
cookieName=".ASPXROLES"
cookieTimeout="30"
cookiePath="/"
cookieRequireSSL="false"
cookieSlidingExpiration="true"
cookieProtection="All"
defaultProvider="AspNetSqlRoleProvider"
createPersistentCookie="false"
maxCachedResults="25">
<providers>
<clear />
<add
connectionStringName="MembershipConnection"
applicationName="Mvc3"
name="AspNetSqlRoleProvider"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<add
applicationName="Mvc3"
name="AspNetWindowsTokenRoleProvider"
type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
นี่คือรหัสที่คุณต้องใส่ใน Account Controller ของคุณใน MVC5 และใหม่กว่าเพื่อรับรายการบทบาทของผู้ใช้:
csharp
public async Task<ActionResult> RoleAdd(string UserID)
{
return View(await
UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList());
}
ไม่จำเป็นต้องใช้Roles.GetRolesForUser()
และเปิดใช้งานคุณสมบัติตัวจัดการบทบาท
web.config
อย่างไร ฉันลองใส่เข้าไปApplication_Start
แล้วก็บอกว่าThis method can only be called during the application's pre-start initialization phase.