Pergunta

Tenho experimentado os exemplos DotNetOpenAuth com ASP.Net MVC 4 Developer Preview.

Posso invocar com sucesso meu Action de minha página de teste, mas encontro um problema estranho por causa de uma linha 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

Se eu comentar a linha de código ofensiva e descomentar a anterior, não vejo mais o erro de execução.

Até agora, tentei:

1) Garantindo que tenho os redirecionamentos corretos:

<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) Tenha os namespaces corretos:

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

Parece-me que a dll DotNetOpenAuth foi compilada contra MVC V 1.0.0 e o redirecionamento de ligação não está funcionando ou o método de extensão talvez esteja funcionando contra um método obsoleto.

Versão MVC: 4.0.0.0 Versão DotNetOpenAuth: 3.4.7.11121

Qualquer ajuda em fazer isso funcionar com MVC 4 seria muito apreciada. A imagem da tela de erro MVC está mais abaixo:

Imagem da tela de erro

Atualizar Descobri que AsActionResult é a causa do problema, talvez porque o método de extensão não seja compatível com .Net 4.0. Posso obter o objeto OutgoingWebResponse em request.RedirectingResponse, mas sei como convertê-lo em um ActionResult

Foi útil?

Solução

Parece que seus redirecionamentos de vinculação estão corrompidos.Observe como System.Web.Mvc aparece duas vezes?Tente remover o segundo, pois o primeiro parece correto.

Sim, o DNOA é construído em MVC 1.0, e isso ocorre por design para que funcione em todas as versões de MVC (dados os redirecionamentos apropriados).Isso é puramente uma coisa da versão MVC - não uma coisa do .NET 4.0.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top