MVC 4.5 自定义角色提供程序错误(找不到默认提供程序)

本文关键字:程序 找不到 默认 错误 角色 MVC 自定义 | 更新日期: 2023-09-27 18:37:07

我在尝试实现自定义角色提供程序时感到非常沮丧。 我挂断了"找不到默认角色提供程序"错误消息。 这是我的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" />
  </configSections>
  <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" />
  </appSettings>
  <system.web>
    <httpRuntime targetFramework="4.5" />
    <compilation debug="true" targetFramework="4.5">
      <assemblies>
        <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </assemblies>
    </compilation>
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="900" />
    </authentication>
    <roleManager enabled="true" defaultProvider="AccountRoleProvider">
      <providers>
        <clear/>
        <add name="AccountRoleProvider"
           type="Billing.Business.AccountRoleProvider, Billing"
           enablePasswordRetrieval="false" enablePasswordReset="true"
           requiresQuestionAndAnswer="false" writeExceptionsToEventLog="false" />
      </providers>
    </roleManager>
    <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.Routing" />
        <add namespace="System.Web.WebPages" />
        <add namespace="System.Web.Optimization" />
      </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>
</configuration>

下面是自定义 RoleProvider 类的代码:

namespace Billing.Business
{
    public class AccountRoleProvider : RoleProvider
    {
        ...
        public override string[] GetRolesForUser(string username)
        {
            List<string> userRoles = new List<string>();
            var entities = new CRSCommonEntities();
            short role = entities.CrsAppUsers.First(u => u.UserName == username).UserType;
            if (role >= (short)UserRole.ADMIN)
            {
                userRoles.Add(UserRole.ADMIN.ToString());
            }
            if (role >= (short)UserRole.STAFF)
            {
                userRoles.Add(UserRole.STAFF.ToString());
            }
            if (role >= (short)UserRole.CHAIN)
            {
                userRoles.Add(UserRole.CHAIN.ToString());
            }
            if (role >= (short)UserRole.PROPERTY)
            {
                userRoles.Add(UserRole.PROPERTY.ToString());
            }
            return userRoles.ToArray();
        }
        /// <summary>
        /// This returns true if the user has an access level at or above the request level
        /// </summary>
        /// <param name="username"></param>
        /// <param name="roleName"></param>
        /// <returns></returns>
        public override bool IsUserInRole(string username, string roleName)
        {
            var entities = new CRSCommonEntities();
            var user = entities.AppUsers.Single(u => u.UserName == username);
            return user.UserType >= (short)Enum.Parse(typeof(UserRole), roleName);
        }
        ...
    }
}

如果你们能帮我发现我做错了什么,我只是没有看到它,我已经开始了两天了。 谢谢!

MVC 4.5 自定义角色提供程序错误(找不到默认提供程序)

我终于想通了。 提供程序的名称重写必须与 web.config 中设置的名称相同。 我只需要将获取返回值更改为"帐户角色提供程序"即可!

type="Billing.Business.AccountRoleProvider, Billing"

提供程序所在的程序集是否称为Billing?您的程序集很可能被称为更多的东西。

如果它实际上称为 Billing ,请确保保存Web.config的程序集具有对 Billing 的引用。