繁体   English   中英

无法将类型为“ System.Web.Hosting.SimpleWorkerRequest”的对象转换为类型为“ System.Web.Hosting.IIS7WorkerRequest”的对象

[英]Unable to cast object of type 'System.Web.Hosting.SimpleWorkerRequest' to type 'System.Web.Hosting.IIS7WorkerRequest'

我将解决方案从VS2010迁移到VS2013之后,我收到了InvalidCastException。

在VS2010中,一切正常,在VS2013中,相同的代码给出以下错误:

System.Web.dll中发生类型'System.InvalidCastException'的异常,但未在用户代码中处理

其他信息:无法将类型为“ 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);
    }

从技术上讲,这不是答案。 但这帮助我解决了问题。 因此,我正在与大家分享这一点,希望这将在不久的将来防止某些人感到头疼。

在Visual Studio 2010 Professional中,我正在使用Visual Studio Development Server通过特定端口(4302)运行我的项目。

在Visual Studio 2013社区版中,我在IIS Express上运行我的项目。 由于某些原因,我仍然不知道为什么,这导致我的软件将“ IIS7WorkerRequest”转换为“ SimpleWorkerRequest”对象。

在使用自定义虚拟目录切换到本地IIS服务器后,我的错误消失了。 如果有人可以解释这一点,我很想知道为什么会这样。 但是现在这解决了上面的问题。

您不能从同级类转换为另一同级。 您可以从父对象投射到孩子,或从孩子投射到父母,但不能在兄弟姐妹之间投射。

https://msdn.microsoft.com/en-us/library/ms173105.aspx

由于SimpleWorkerRequest和IIS7WorkerRequest都继承自HttpWorkerRequest,因此无法在它们之间进行强制转换。 我首先要问自己为什么想要或认为必须执行此转换,如果找不到替代方法,请编写一种转换方法以在它们之间进行映射。 但是,这通常是一个好兆头,说明您走错了代码的正确路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM