7

ASP.Net MVC 4DeveloperPreviewを使用してDotNetOpenAuthサンプルを試しています。

テストページからアクションを正常に呼び出すことができますが、1行のコードが原因で奇妙な問題が発生します。

  var request = _openid.CreateRequest(openIdUrl);
  var fetch = new FetchRequest();
  fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
  fetch.Attributes.AddRequired(WellKnownAttributes.Name.First);
  fetch.Attributes.AddRequired(WellKnownAttributes.Name.Last);
  request.AddExtension(fetch);
  //return RedirectToAction("Login");
  return request.RedirectingResponse.AsActionResult(); // <-- This is the line throwing the error

問題のあるコード行をコメントアウトし、この前の行のコメントを解除すると、ランタイムエラーは表示されなくなります。

これまでに試しました:

1)正しいリダイレクトがあることを確認します。

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        </dependentAssembly>
    </assemblyBinding>
    <legacyHMACWarning enabled="0" />
</runtime>

2)正しい名前空間を持っている:

using DotNetOpenAuth.OpenId.Extensions.AttributeExchange;
using DotNetOpenAuth.OpenId.Extensions;

DotNetOpenAuthdllがMVCV1.0.0に対してコンパイルされ、バインディングリダイレクトが機能していないか、拡張メソッドが非推奨のメソッドに対して機能していたようです。

MVCバージョン:4.0.0.0 DotNetOpenAuthバージョン:3.4.7.11121

これをMVC4で機能させるための助けをいただければ幸いです。MVCエラー画面の画像はさらに下にあります。

エラー画面の画像

更新 AsActionResultが問題の原因であることがわかりました。おそらく、拡張メソッドが.Net4.0と互換性がないためです。request.RedirectingResponseからOutgoingWebResponseオブジェクトを取得できますが、ActionResultにキャストする方法を知っています。

4

1 に答える 1

6

バインディングリダイレクトが破損しているようです。System.Web.Mvcが2回表示されることに注意してください。最初のものは正しいように見えるので、2番目のものを削除してみてください。

はい、DNOAはMVC 1.0に対して構築されています。これは、MVCのすべてのバージョンに対して機能するように設計されています(適切なリダイレクトが与えられた場合)。これは純粋にMVCバージョンのものであり、.NET4.0のものではありません。

于 2012-01-17T14:43:11.447 に答える