10

この投稿を読んで、ControllerExtensions.RedirectToAction メソッドを使用したいと思いました。しかし、私は System.Security.VerificationException を持っています。これは、型引数 '[MyController type]' が型パラメーター 'T' の制約に違反しています。

私のコントローラーは次のように宣言されています:

   public class ProductsSearchController : Controller
   {
        ...
   }

お願い助けて。また、最新の MvcContrib ライブラリをhereからダウンロードしようとしました。それは私を助けませんでした。

興味深い事実に気づきました。この例外は、単体テストから呼び出す場合にのみ発生します。ただし、Web サイトから使用する場合も例外ではありません。ただし、正しく動作していないようです。次のような式でアクションにオブジェクトを渡すと:

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

このオブジェクトの .ToString を呼び出すだけです! そして、私は次のようなURLを取得します:

ProductsSearch?filter=WebShop.FinderModel.Filters.ProductsFilter

なにが問題ですか?

4

1 に答える 1

23

私はこの問題を抱えています。

System.Web.Mvcバージョン4.0.30319と一緒にMvcContribバージョン2.0.95.0を使用していました。

問題は、MvcContribが以前のバージョンのSystem.Web.Mvcを参照していることでした。

古いバージョンのMvcContribをMvc2で使用している場合は、最新バージョンのMvcContribをダウンロードして参照するだけで十分です。.NET4とMvc3を使用している場合は、単体テストプロジェクトの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プロジェクトに追加する必要がある場合もあります。テストプロジェクトで例外が発生するだけの場合は、このセクションがすでに存在し、web.configで正しい可能性があります。そこからコピーして貼り付けることができます。

コード分​​析を使用している場合は、バインディングリダイレクトを尊重するために、アセンブリバインディングリダイレクトとコード分析も確認する必要があります。

于 2010-10-29T08:35:23.710 に答える