Six*_*tto 68 c# asp.net-mvc simplemembership asp.net-mvc-5 asp.net-identity
我们有一个基于ASP.NET MVC 4和Web API的现有应用程序.该网站的管理部分使用简单成员资格.我有兴趣将应用程序升级到MVC 5/Web API 2,以利用已添加的一些新功能.但看起来它们可能不兼容.
具体来说,在将NuGet中的RC包安装到我的解决方案中的一个项目中并更新web.config信息之后,应用程序在启动期间开始在调用的行上死亡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
Run Code Online (Sandbox Code Playgroud)
使用我尚未升级的简单成员资格的同一解决方案中的其他项目继续正常工作.
当然,谷歌搜索更多信息会引发大量的点击,但WebMatrix没什么特别的.
FWIW:我知道Microsoft已经引入了(又一个)成员身份和身份解决方案,但除非有一种方法可以将其用于现有的简单成员资格表,或者是我们所有现有用户数据的无缝迁移路径,这不是一个真正的选择为了我们.
我刚刚尝试了一下我们应用程序当前主干的新结帐.我正在使用Visual Studio 2012,但是按照MS的说明升级现有项目.更新到MVC 5/Web API 2/EF 6后,该应用程序启动运行就好了.
web.config删除中没有明确的信任要求.我加入了代码这个问题来Global.asax.cs,并报告该应用程序是完全信任(在IIS Express中,从VS只是F5-ED)上运行.
重新添加相同的调用InitializeDatabaseConnection(),它开始死于完全相同的异常.
从周五的@Kevin's更新中尝试解决方案,我发现它有效.我真的很奇怪,添加这个显然不相关的软件包可以解决这些安全问题,而且在我从我的解决方案中删除软件包之后更加奇怪,并且它继续工作.
仔细看看发生了什么,我意识到这个修复行为的原因很简单:Microsoft.AspNet.WebHelpers包有两个依赖关系被添加到我的解决方案中:Microsoft.AspNet.WebPages.Data和Microsoft.AspNet.WebPages.WebData.Microsoft已将WebMatrix类移动到新包中.
所以添加了帮助程序包修复了问题,不是因为它正在做的任何事情,而是因为它导致破坏的程序集的更新版本被添加到我的解决方案中.因此,初始不兼容性的解决方案是在从NuGet更新其他所有内容时安装这些新包:
Install-Package Microsoft.AspNet.WebPages.WebData
Run Code Online (Sandbox Code Playgroud)
有人建议你,你可能还需要手动安装第二个新包:
Install-Package Microsoft.AspNet.WebPages.Data
Run Code Online (Sandbox Code Playgroud)
这不应该是必要的,因为这个包是第一个的显式依赖,而NuGet应该足够智能来安装它们.但是如果在构建时遇到错误,或者没有看到NuGet添加依赖项,它可能对您有所帮助.
Kev*_*ans 36
WebMatrix与MVC 5兼容.
我所做的是采用一个空的MVC 5项目,并使用SimpleSecurity将WebMatrix SimpleMembershipProvider合并到其中,SimpleSecurity是一个将SimpleMembership与MVC应用程序分离的开源项目.到目前为止,我能够创建数据库,播种,登录和注销.我计划在此参考应用程序中添加其他功能,例如电子邮件确认和各种测试.当我完成后,我将在SimpleSecurity Project中发布源代码
如果我不得不猜测,您的问题可能出在升级过程中.您将MVC 4项目升级到MVC 5的过程是什么? 你有没有按照这个过程?您使用的是哪个版本的WebMatrix程序集?您使用的是哪个版本的Visual Studio?我使用的是WebMatrix和Visual Studio 2013 RC 2.0.0.0版.
更新(10/25/2013)
我继续我的实验,将SimpleMembership添加到一个MVC 5项目中,并且沿着它破坏的线路,我得到了与@Sixten Otto相同的结果.我没有逐步测试,因为我添加了东西,但我怀疑在安装Web API程序集时可能会发生这种情况.创建新的MVC 5项目时,默认情况下不会安装它们.
我对错误做了一些更多的研究,并且遇到了这个题为" 尝试通过安全透明方法'WebMatrix.WebData.PreApplicationStartCode.Start()' "的QA .这是一个旧的质量保证,最初有人在将MVC 3应用程序升级到MVC 4时遇到了同样的错误.但是最近人们一直在为升级到MVC 5添加答案,其中一个答案对我有用. 我的解决方案是安装NuGet包Microsoft.AspNet.WebHelpers. 安装此包后一切正常.
关于我迁移到新ASP.NET身份的研究的一个注释是,他们不使用相同的密码哈希,这阻止了将旧成员移动到ASP.NET身份使用的数据库中.ASP.NET身份似乎现在处于真正的变化中,所以他们可能会为此提出解决方案.
更新(2014年2月16日)
我错误地报告了密码的哈希算法在SimpleMembership和ASP.NET Identity中是不同的.我假设这是基于哈希密码的视觉检查,假设它只是字段中的哈希密码.经过进一步研究后,我发现SimpleMembership使用System.Web.Helpers.Crypto类来散列密码,密码字段中存储的内容实际上是256位子密钥和salt.有了这些信息,我运行了一些测试来验证ASP.NET Identity可以验证由SimpleMembership生成的密码,并且它已通过.我试图找出SimpleMembership使用的哈希算法,因此我可以插入ASP.NET身份中的密码哈希,这将允许我将数据从SimpleMembership网站迁移到使用ASP.NET身份的网站.我将在本文中更详细地讨论密码哈希以及如何将数据从SimpleMembership迁移到ASP.NET Identity.
Anu*_*hka 30
如果您收到错误
尝试通过安全透明方法'WebMatrix.WebData.PreApplicationStartCode.Start()'来访问安全关键方法'System.Web.WebPages.Razor.WebPageRazorHost.AddGlobalImport(System.String)'失败.
为了使用NuGet包管理器修复此安装此包.
Install-Package Microsoft.AspNet.WebHelpers
Run Code Online (Sandbox Code Playgroud)
在那之后,可能你会得到另一个错误
无法加载WebMatrix.Data版本3.0.0.0程序集
使用NuGet包管理器修复此安装此包.
Install-Package Microsoft.AspNet.WebPages.Data
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35554 次 |
| 最近记录: |