【问题标题】:MVC website on a shared hosting environment with restricted trust受限制信任的共享托管环境上的 MVC 网站
【发布时间】:2015-12-22 14:49:48
【问题描述】:

我有一个在 ASP.NET 4.6 上运行的简单 MVC 5 Web 应用程序。该网站在 IIS 中本地配置时有效,但是当发布版本发布并上传到共享托管环境时,我收到错误“覆盖成员时违反继承安全规则”

“/”应用程序中的服务器错误。

覆盖成员时违反了继承安全规则:“SimpleInjector.Integration.Web.Mvc.SimpleInjectorDependencyResolver.GetService(System.Type)”。重写方法的安全可访问性必须与被重写方法的安全可访问性相匹配。

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.TypeLoadException:覆盖成员时违反了继承安全规则:“SimpleInjector.Integration.Web.Mvc.SimpleInjectorDependencyResolver.GetService(System.Type)”。重写方法的安全可访问性必须与被重写方法的安全可访问性相匹配。

来源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

堆栈跟踪:

[TypeLoadException:覆盖成员时违反了继承安全规则:'SimpleInjector.Integration.Web.Mvc.SimpleInjectorDependencyResolver.GetService(System.Type)'。重写方法的安全可访问性必须与被重写方法的安全可访问性相匹配。]

我的理解是,MVC Web 应用程序需要在完全信任的情况下运行,但托管服务提供商表示这是不可能的,并且他们在机器级别设置了一个规则,将应用程序限制为中等信任。

在代码级别是否有解决方法,我不敢相信要运行一个简单的 Web 应用程序,您需要一个可以配置为具有完全访问权限的专用 Web 服务器框。

是否有另一个 IoC 容器可以使用且不会导致此安全冲突?

【问题讨论】:

  • 从 .NET 4.0 开始,Microsoft has deprecated support for partial trust 在 ASP.NET 中。因此,即使您让 Simple Injector 运行,您也可能很快就会遇到麻烦,因为 Microsoft 不会修复任何部分信任问题,并且新开​​发的逻辑不会经过测试以在部分信任下运行。正如您在该链接中看到的那样,您的托管服务提供商不应以部分信任的方式运行。
  • 换句话说,如果您的共享主机提供商不提供完全信任,那么是时候寻找新的共享主机提供商了(或者可能使用可以控制这些设置的虚拟专用服务器自己)。

标签: asp.net-mvc shared-hosting simple-injector


【解决方案1】:

我们忘记用正确的属性标记该类,这导致了这个异常。由于 Microsoft 已弃用对 ASP.NET Web 应用程序的部分信任,因此我们(Simple Injector 贡献者)可能也不会在该领域投资。换句话说,不要指望我们(很快)会修复这个错误。

要解决此问题,请实现您自己的SimpleInjectorDependencyResolver。这样做是微不足道的;您可以从 Simple Injector 的 source code 复制几行代码。

【讨论】:

  • 谢谢,我已将依赖解析器类添加到我的项目中。类需要标记什么属性?
  • 属性不会被忽略吗? stackoverflow.com/questions/27742902/…
  • 如果是你自己的代码,我认为你不需要任何属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2010-11-15
  • 2021-10-13
  • 2012-12-26
相关资源
最近更新 更多