MVC Contrib VerificationException

Я прочитал этот post, и я хотел использовать метод ControllerExtensions.RedirectToAction. Но у меня есть System.Security.VerificationException, которое говорит: type аргумент '[MyController type]' нарушает ограничение параметра типа T.

Мой контроллер объявлен следующим образом:

   public class ProductsSearchController : Controller
   {
        ...
   }

Помогите мне, пожалуйста. Также я попытался загрузить последнюю библиотеку MvcContrib из здесь. Это мне не помогло.

Я заметил интересный факт. У меня есть это исключение только при вызове с модульных тестов. Но нет исключения при использовании с веб-сайта. Однако, похоже, он работает неправильно. Когда я передаю объект в действие в выражении следующим образом:

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

он просто вызывает .ToString этого объекта! И я получаю url вот так:

ProductsSearch? Фильтровать = WebShop.FinderModel.Filters.ProductsFilter

Что не так?

Ответ 1

У меня была эта проблема.

Я использовал MvcContrib версии 2.0.95.0 вместе с System.Web.Mvc версии 4.0.30319.

Проблема заключалась в том, что MvcContrib ссылается на более раннюю версию System.Web.Mvc.

Если вы используете более старую версию MvcContrib с Mvc 2, ее должно быть достаточно для загрузки и ссылки на последнюю версию MvcContrib. Если вы используете .NET 4 и Mvc 3, вам необходимо обновить файл App.Config для вашего проекта unit test (возможно, вам придется добавить его) со следующим: -

<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; вы можете скопировать и вставить его оттуда.

Если вы используете Code Analysis, вам также нужно будет увидеть Перенаправление связывания и анализ кода, чтобы он мог уважать перенаправление привязки.