我将解决方案从VS2010迁移到VS2013后,我收到了InvalidCastException。
在VS2010中一切正常,相同的代码在VS2013中出现以下错误:
类型' System.InvalidCastException'的例外情况发生在 System.Web.dll但未在用户代码中处理
附加信息:无法投射类型的对象 ' System.Web.Hosting.SimpleWorkerRequest'输入 ' System.Web.Hosting.IIS7WorkerRequest'
我不知道该怎么做,也无法在互联网上找到任何相关内容。
错误发生在以下代码段的第5行:
public static void AuthenticateUser(String UserName, Int32 Minutes = 30, Boolean IsPersistent = true)
{
FormsAuthenticationTicket _ticket = new FormsAuthenticationTicket(1, UserName, DateTime.Now, DateTime.Now.AddMinutes(Minutes), IsPersistent, String.Empty);
FormsIdentity _id = new FormsIdentity(_ticket);
var _roles = Roles.GetRolesForUser(UserName);
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(_id, _roles);
}
答案 0 :(得分:3)
从技术上讲,这不是一个答案。但它帮助我解决了我的问题。 因此,我与大家分享这一点,希望这可以防止在不久的将来某些人头疼。
在Visual Studio 2010 Professional中,我使用特定端口(4302)使用Visual Studio开发服务器运行我的项目。
在Visual Studio 2013社区版中,我在IIS Express上运行我的项目。 出于某种原因,我仍然不知道为什么,这导致我的软件投出了一个“IIS7WorkerRequest”#39;到了SimpleWorkerRequest'对象
使用自定义虚拟目录切换到本地IIS服务器后,我的错误消失了。如果有人可以解释这一点,我很想知道为什么会这样。但是现在这解决了上面的问题。
答案 1 :(得分:1)
你不能从兄弟姐妹阶级演绎到另一个兄弟姐妹;你可以从父母到孩子,或从孩子到父母,但不能在兄弟姐妹之间。
https://msdn.microsoft.com/en-us/library/ms173105.aspx
由于SimpleWorkerRequest和IIS7WorkerRequest都继承自HttpWorkerRequest,因此无法在它们之间进行转换。我首先会问自己为什么要或者认为你必须执行这种转换,如果你找不到替代方案,那么写一个转换方法来映射它们。但是,这通常是一个很好的迹象,表明你的代码走错了道路。