首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET MVC5是否与WebMatrix SimpleMembershipProvider不兼容?

ASP.NET MVC5是否与WebMatrix SimpleMembershipProvider不兼容?
EN

Stack Overflow用户
提问于 2013-10-04 05:49:37
回答 5查看 36.7K关注 0票数 68

我们有一个现有的应用程序,这是建立在ASP.NET MVC4和Web API之上。该网站的管理部分使用简单的成员资格。我对将应用程序升级到MVC5/ Web API 2很感兴趣,以利用已添加的一些新功能。但看起来它们可能是不兼容的。

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

代码语言:javascript
复制
[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来说并没有什么特别的。

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

更新(10月11日)

我刚刚又尝试了一次,对我们的应用程序的当前主干进行了一次新的检查。我使用的是Visual Studio 2012,但在升级现有项目时遵循了微软的说明。在更新到MVC 5/ Web API 2/ EF 6之后,应用程序启动并运行良好。

web.config中没有要删除的显式信任要求。我将代码从this question添加到Global.asax.cs,它报告应用程序以完全信任模式运行(在IIS Express中,仅使用VS的F5-ed )。

将相同的调用重新添加到InitializeDatabaseConnection(),它开始死掉,并出现完全相同的异常。

解决方案(10月28日)

在@Kevin周五的更新中尝试这个解决方案,我发现它是有效的。我真的很奇怪,添加这个明显无关的包就可以解决这些安全问题,更奇怪的是,我从解决方案中删除了这个包,它仍然有效。

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

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

代码语言:javascript
复制
Install-Package Microsoft.AspNet.WebPages.WebData

更新(2015年5月13日)

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

代码语言:javascript
复制
Install-Package Microsoft.AspNet.WebPages.Data

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-10-09 20:46:15

WebMatrix与MVC5兼容。

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

如果非要我猜的话,你的问题可能出在升级过程中。你是怎么把你的MVC4项目升级到MVC5的?Did you follow this process?您使用的是什么版本的WebMatrix程序集?您使用的是什么版本的Visual Studio?我使用的是2.0.0.0版的WebMatrix和Visual Studio2013 RC。

更新(10/25/2013)

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

我对这个错误做了更多的研究,发现了这个标题为"Attempt by security transparent method 'WebMatrix.WebData.PreApplicationStartCode.Start()'“的QA。这是一个旧的QA,最初有人在将MVC3应用程序升级到MVC4时遇到了同样的错误,但最近人们一直在添加关于升级到MVC5的答案,其中一个答案对我有效。对于我来说,解决方案是安装Microsoft.AspNet.WebHelpers.的NuGet包,安装完这个包后,一切都很好。

关于迁移到新的ASP.NET身份的研究,我要注意的一点是,它们不使用相同的密码散列,这排除了将旧成员移动到ASP.NET身份使用的数据库中。ASP.NET Identity现在似乎处于真正的变化中,所以也许他们会想出一个解决方案。

更新(2014年2月16日)

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

票数 36
EN

Stack Overflow用户

发布于 2014-03-23 13:52:11

如果您收到错误消息

安全透明方法‘WebMatrix.WebData.PreApplicationStartCode.Start()’访问安全关键方法‘System.Web.WebPages.Razor.WebPageRazorHost.AddGlobalImport(System.String)’的

尝试失败。

要修复此问题,请使用NuGet包管理器安装此包。

代码语言:javascript
复制
Install-Package Microsoft.AspNet.WebHelpers

在此之后,您可能会得到另一个错误

无法加载WebMatrix.Data版本3.0.0.0程序集

要修复此问题,请使用NuGet包管理器安装此包。

代码语言:javascript
复制
Install-Package Microsoft.AspNet.WebPages.Data
票数 30
EN

Stack Overflow用户

发布于 2013-10-11 01:59:41

我们目前正在编写一个迁移文档,用于从简单的成员身份迁移到ASP.NET身份。在我们推送此迁移文档之前,请持续关注几个星期。现在,您必须将简单的成员身份模式映射到身份,并更改应用程序代码以使用OWIN进行登录/ SIgnOut

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19169846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档