我正在开发一个 ASP.NET MVC 3 应用程序。
我已经实现了用于用户身份验证和授权的自定义 Principal 和 Identity 类。我正在使用表单身份验证。
在我的所有控制器中,我使用AuthorizeAtribute
来检查用户是否处于我的自定义角色之一,以根据用户的权限限制或授予对功能的访问权限。
当我创建项目时,我使用了“ASP.NET MVC 3 Web 应用程序”模板,其中包括用户帐户的默认模型和控制器。
我为项目添加了重要的功能,并对其进行了修改,以使用完全不使用内置 ASPNETDB 数据库的自定义 Principal 和 Identity 类。
在我的开发机器上一切正常;但是,当我将项目部署到 beta Web 服务器时,当用户未通过身份验证并且他们尝试直接访问某个功能时,我遇到了错误。
错误消息是Access to the path '...\App_Data' is denied.'
。
堆栈跟踪如下:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Directory.InternalCreateDirectory(String fullPath, String path, Object dirSecurityObj, Boolean checkHost)
at System.IO.Directory.InternalCreateDirectoryHelper(String path, Boolean checkHost)
at System.IO.Directory.CreateDirectory(String path)
at System.Web.DataAccess.SqlConnectionHelper.CreateMdfFile(String fullFileName, String dataDir, String connectionString)
at System.Web.DataAccess.SqlConnectionHelper.EnsureDBFile(String connectionString)
at System.Web.DataAccess.SqlConnectionHelper.GetConnection(String connectionString, Boolean revertImpersonation)
at System.Web.Security.SqlRoleProvider.GetRolesForUser(String username)
at WebMatrix.WebData.SimpleRoleProvider.GetRolesForUser(String username)
at System.Web.Security.RolePrincipal.IsInRole(String role)
at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate)
at System.Web.Mvc.AuthorizeAttribute.AuthorizeCore(HttpContextBase httpContext)
at System.Web.Mvc.AuthorizeAttribute.OnAuthorization(AuthorizationContext filterContext)
发生错误的原因是没有 App_Data 文件夹,也没有 ASPNETDB.MDF 文件,因为应用程序应该使用自定义的 Principal 类。
当尝试检查权限但自定义主体类型未应用于当前线程时似乎会发生此错误,AuthorizeAtribute
因为用户不再登录。
例如,如果用户在他们的 Web 浏览器中键入 URL,则 Web 服务器在执行我的控制器中的函数http://theWebsite/theContoller/theRestrictedFeature/
行时会崩溃。<Authorize(Roles:=("Has007Access")>
theRestrictedFeature
我真的不知道如何解决这个问题,并希望得到一些关于如何进行的建议。