【问题标题】:MVC Contrib VerificationExceptionMVC 贡献验证异常
【发布时间】:2011-01-18 21:49:55
【问题描述】:

我已阅读此post 并且我想使用 ControllerExtensions.RedirectToAction 方法。但是我有 System.Security.VerificationException 它说:​​类型参数'[MyController type]'违反了类型参数'T'的约束。

我的控制器声明如下:

   public class ProductsSearchController : Controller
   {
        ...
   }

请帮帮我。 我还尝试从here 下载最新的 MvcContrib 库。它没有帮助我。

我注意到一个有趣的事实。我只有在从单元测试调用时才有这个例外。但是从网站使用时也不例外。但是,它似乎无法正常工作。当我将一个对象传递给这样的表达式中的动作时:

this.RedirectToAction(x => x.Index(filter))

它只是调用这个对象的 .ToString !我得到这样的网址:

ProductsSearch?filter=WebShop.FinderModel.Filters.ProductsFilter

怎么了?

【问题讨论】:

  • 你能显示你正在重定向的行吗?
  • return this.RedirectToAction(x => x.Index(filter));

标签: c# asp.net-mvc mvccontrib


【解决方案1】:

我一直有这个问题。

我使用的是 MvcContrib 版本 2.0.95.0 和 System.Web.Mvc 版本 4.0.30319。

问题在于 MvcContrib 引用了 System.Web.Mvc 的早期版本。

如果您在 Mvc 2 中使用旧版本的 MvcContrib,下载并引用最新版本的 MvcContrib 就足够了。如果您使用的是 .NET 4 和 Mvc 3,则需要使用以下内容更新单元测试项目的 App.Config 文件(您可能必须添加一个):-

<configuration>
...

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

....
</configuration>

请记住,如果您使用不同版本的 MVC,您可能需要更改版本号。 (例如,在进行此编辑时,您需要使用 oldVersion="1.0.0.0-5.1.0.0"newVersion="5.2.0.0")。

您可能还需要将此添加到您的网络项目中。如果您只是在测试项目中遇到异常,则很可能此部分已经存在并且在您的 web.config 中是正确的;您可以从那里复制并粘贴它。

如果您使用的是代码分析,您还需要查看 Assembly Binding Redirection and Code Analysis 以使其遵守绑定重定向。

【讨论】:

  • 刚刚遇到这个问题,发现了这篇文章。将我的运行时节点从 Mvc 项目复制到单元测试项目配置文件中,一切正常。我也谢谢你:)
  • 目前这也适用于 MVC4(截至今天为测试版)。只需将旧版本更改为“1.0.0.0-3.0.0.0”,将新版本更改为“4.0.0.0”。
猜你喜欢
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 2011-09-13
  • 2021-04-27
  • 2010-12-24
  • 1970-01-01
相关资源
最近更新 更多