无法转换类型为#System; Web.Hosting.SimpleWorkerRequest'的对象输入' System.Web.Hosting.IIS7WorkerRequest'

时间:2015-06-10 11:08:23

标签: c# visual-studio-2010 visual-studio-2013 migration

我将解决方案从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);
    }

2 个答案:

答案 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,因此无法在它们之间进行转换。我首先会问自己为什么要或者认为你必须执行这种转换,如果你找不到替代方案,那么写一个转换方法来映射它们。但是,这通常是一个很好的迹象,表明你的代码走错了道路。