Domanda

Ho provato gli esempi DotNetOpenAuth con ASP.Net MVC 4 Developer Preview.

Posso richiamare correttamente la mia azione dalla mia pagina di test, ma riscontro uno strano problema a causa di una riga di codice:

  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

Se commento la riga di codice offensiva e rimuovo il commento prima di questa, non vedo più l'errore di runtime.

Finora ho provato:

1) Assicurarsi di disporre dei reindirizzamenti corretti:

<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) Avere gli spazi dei nomi corretti:

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

Mi sembra che la dll DotNetOpenAuth sia stata compilata con MVC V 1.0.0 e il reindirizzamento del binding non funziona o il metodo di estensione potrebbe funzionare contro un metodo deprecato.

Versione MVC: 4.0.0.0 Versione DotNetOpenAuth: 3.4.7.11121

Qualsiasi aiuto su come farlo funzionare con MVC 4 sarebbe molto apprezzato. L'immagine della schermata di errore MVC è più in basso:

Immagine della schermata di errore

Aggiorna Ho scoperto che AsActionResult è la causa del problema, forse perché il metodo di estensione non è compatibile con .Net 4.0. Posso ottenere l'oggetto OutgoingWebResponse da request.RedirectingResponse ma so come trasmetterlo a un ActionResult

È stato utile?

Soluzione

Sembra che i tuoi reindirizzamenti vincolanti siano danneggiati.Notate come System.Web.Mvc appare due volte?Prova a rimuovere il secondo poiché il primo sembra corretto.

Sì, DNOA è basato su MVC 1.0, e questo è di progettazione in modo che funzioni con tutte le versioni di MVC (dati i reindirizzamenti appropriati).Questa è puramente una cosa della versione MVC, non una cosa .NET 4.0.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top