Pregunta

He estado probando las muestras de DotNetOpenAuth con ASP.Net MVC 4 Developer Preview.

Puedo invocar correctamente mi acción desde mi página de prueba, pero me encuentro con un problema extraño debido a una línea de código:

  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

Si comento la línea de código ofensiva y elimino el comentario de la anterior, ya no veo el error de tiempo de ejecución.

Hasta ahora lo he intentado:

1) Asegurarme de tener los redireccionamientos correctos:

<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) Tenga los espacios de nombres correctos:

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

Me parece que la dll DotNetOpenAuth se compiló contra MVC V 1.0.0 y la redirección de enlace no funciona o el método de extensión tal vez estaba funcionando contra un método obsoleto.

Versión MVC: 4.0.0.0 DotNetOpenAuth Versión: 3.4.7.11121

Cualquier ayuda para que esto funcione con MVC 4 será muy apreciada. La imagen de la pantalla de error de MVC se encuentra más abajo:

Imagen de la pantalla de error

Actualización Descubrí que AsActionResult es la causa del problema, tal vez porque el método de extensión no es compatible con .Net 4.0. Puedo obtener el objeto OutgoingWebResponse de request.RedirectingResponse pero sé cómo convertirlo en ActionResult

¿Fue útil?

Solución

Parece que sus redireccionamientos vinculantes están dañados.¿Observa cómo System.Web.Mvc aparece dos veces?Intente quitar el segundo ya que el primero parece correcto.

Sí, DNOA está construido contra MVC 1.0, y esto es por diseño para que funcione contra todas las versiones de MVC (dadas las redirecciones apropiadas).Esto es puramente una cosa de la versión MVC, no una cosa de .NET 4.0.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top