gpt4 book ai didi

c# - ASP.NET MVC 5 是否与 WebMatrix SimpleMembershipProvider 不兼容?

转载 作者:IT王子 更新时间:2023-10-29 03:42:34 24 4
gpt4 key购买 nike

我们有一个基于 ASP.NET MVC 4 和 Web API 构建的现有应用程序。该网站的管理部分使用简单成员(member)资格。我有兴趣将应用程序升级到 MVC 5/Web API 2,以利用一些已添加的新功能。但看起来它们可能不兼容。

具体来说,在将 NuGet 的 RC 包安装到我的解决方案中的项目之一之后,updating the web.config information ,应用程序在启动期间在调用 WebSecurity.InitializeDatabaseConnection() 的行上开始死亡,但有以下异常:

[MethodAccessException: Attempt by security transparent method 'WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(System.Object, WebMatrix.Data.ConnectionEventArgs)' to access security critical method 'System.Web.WebPages.HttpContextExtensions.RegisterForDispose(System.Web.HttpContextBase, System.IDisposable)' failed.]
WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(Object sender, ConnectionEventArgs e) +70
WebMatrix.Data.Database.OnConnectionOpened() +70
WebMatrix.Data.Database.EnsureConnectionOpen() +51
WebMatrix.Data.Database.QueryValue(String commandText, Object[] args) +63
WebMatrix.WebData.DatabaseWrapper.QueryValue(String commandText, Object[] parameters) +13
WebMatrix.WebData.SimpleMembershipProvider.GetUserId(IDatabase db, String userTableName, String userNameColumn, String userIdColumn, String userName) +206
WebMatrix.WebData.SimpleMembershipProvider.ValidateUserTable() +87

同一解决方案中使用我升级的简单成员资格的其他项目继续正常工作。

当然,通过谷歌搜索更多信息会发现很多关于该异常的匹配项,但没有什么特别针对 WebMatrix。

FWIW:我知道微软推出了(yet another) membership and identity solution ,但除非有一种方法可以将其与现有的简单成员(member)表一起使用,或者为我们所有现有的用户数据提供无缝迁移路径,否则这对我们来说并不是一个真正的选择。

更新(10 月 11 日)

我刚刚再次尝试重新检查我们应用程序的当前主干。我使用的是 Visual Studio 2012,但除此之外还按照 MS 的说明升级现有项目。更新到 MVC 5/Web API 2/EF 6 后,应用程序启动运行得很好。

在要删除的 web.config 中没有明确的信任要求。我添加了来自 this question 的代码到 Global.asax.cs,它报告该应用程序正在完全信任地运行(在 IIS Express 中,只需从 VS 中按 F5 键)。

重新添加对 InitializeDatabaseConnection() 的相同调用,它开始死于完全相同的异常。

解决方案(10 月 28 日)

从周五开始尝试@Kevin 更新中的解决方案,我发现它有效。添加这个明显不相关的包会解决这些安全问题对我来说真的很奇怪,而且在我从我的解决方案中删除包后甚至更多奇怪,并且它继续工作

仔细看看发生了什么,我意识到这修复了这个行为的原因很简单:Microsoft.AspNet.WebHelpers 包有两个依赖项被添加到我的解决方案中: Microsoft.AspNet.WebPages.DataMicrosoft.AspNet.WebPages.WebDataMicrosoft 已将 WebMatrix 类移动到新包中。

所以添加了 helpers 包解决了问题,不是因为它在做什么,而是因为它导致将损坏的程序集的更新版本添加到我的解决方案中。那么,最初不兼容的解决方案是在从 NuGet 更新所有其他内容时安装这些新包:

Install-Package Microsoft.AspNet.WebPages.WebData

更新(2015 年 5 月 13 日)

已经suggested to me您可能还需要手动安装第二个新软件包:

Install-Package Microsoft.AspNet.WebPages.Data

不应该是必需的,因为这个包是an explicit dependency第一个,NuGet 应该足够聪明,可以同时安装这两个。但是如果你得到 an error when building ,或者看不到 NuGet 添加依赖项,它可能会对您有所帮助。

最佳答案

WebMatrix 与 MVC 5 兼容。

我所做的是采用一个空的 MVC 5 项目并使用 SimpleSecurity 将 WebMatrix SimpleMembershipProvider 合并到其中,一个开源项目 decouples SimpleMembership from your MVC application .到目前为止,我已经能够创建数据库、为其播种以及登录和注销。我计划在此引用应用程序中添加其他功能,例如电子邮件确认和各种测试。完成后,我将在 SimpleSecurity Project 中发布源代码

如果我不得不猜测,您的问题可能出在升级过程中。您采用什么流程将 MVC 4 项目升级到 MVC 5? Did you follow this process ?您使用的是什么版本的 WebMatrix 程序集?您使用的是哪个版本的 Visual Studio?我使用的是 WebMatrix 2.0.0.0 版和 Visual Studio 2013 RC。


更新 (10/25/2013)

我继续我的实验,将 SimpleMembership 添加到一个 MVC 5 项目中,但它在某个地方失败了,我得到了与@Sixten Otto 相同的结果。我没有在添加内容时进行增量测试,但我怀疑它可能是在我安装 Web API 程序集时发生的。创建新的 MVC 5 项目时,默认情况下不会安装它们。

我对该错误进行了更多研究,发现了名为“Attempt by security transparent method 'WebMatrix.WebData.PreApplicationStartCode.Start()'”的 QA。这是一个旧的 QA,最初有人在将 MVC 3 应用程序升级到 MVC 4 时遇到同样的错误。但最近人们一直在添加有关升级到 MVC 5 的答案,其中一个答案对我有用。 我的解决方案是安装 NuGet 包 Microsoft.AspNet.WebHelpers安装此包后一切正常。

关于我迁移到新的 ASP.NET Identity 的研究的注意事项是它们不使用相同的密码哈希,这排除了将旧成员移动到 ASP.NET Identity 使用的数据库中的可能性。 ASP.NET Identity 现在似乎在不断变化,所以也许他们会为此想出一个解决方案。


更新 (2/16/14)

我错误地报告了密码的哈希算法在 SimpleMembership 和 ASP.NET Identity 中不同。我假设这是基于对散列密码的目视检查,假设它只是字段中的散列密码。经过进一步研究,我发现 SimpleMembership 使用 System.Web.Helpers.Crypto 类对密码进行哈希处理,密码字段中存储的实际上是一个 256 位子 key 和盐。有了这些信息,我运行了一些测试来验证 ASP.NET Identity 可以验证由 SimpleMembership 生成的密码,并且它通过了。我试图找出 SimpleMembership 使用的哈希算法,以便我可以在 ASP.NET Identity 中插入密码哈希器,这将允许我将数据从 SimpleMembership 网站迁移到使用 ASP.NET Identity 的网站。事实证明这是没有必要的。 I talk about the password hash and how to migrate the data from SimpleMembership to ASP.NET Identity in more detail in this article .

关于c# - ASP.NET MVC 5 是否与 WebMatrix SimpleMembershipProvider 不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19169846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com