2010-04-27 4 views
5

Il metodo DotNetOpenAuth.OpenId.RelyingParty.IAuthenticationRequest.RedirectToProvider() è documentato non tornare mai più:IAuthenticationRequest.RedirectToProvider non dovrebbe tornare, ma lo fa

reindirizza l'agente utente al provider per l'autenticazione. L'esecuzione della pagina corrente termina dopo questa chiamata.

Tuttavia, torna sotto l'ultima implementazione (3.4.3). Sto usando il seguente codice:

using (var relayingParty = new OpenIdRelyingParty()) 
{ 
    var response = relayingParty.GetResponse(); 

    if (response == null) 
    { 
    // Stage 2: user submitting Identifier 
    var openId = Request.Form["openId"]; 
    relayingParty.CreateRequest(openId).RedirectToProvider(); 

    throw new Exception("Never gets here"); 
    } 

    ... 
} 

(La linea con "Non arriva mai" è stata raggiunta). Ho bisogno di restituire un ActionResult da questo metodo ...

  1. È un bug noto?
  2. Esiste una soluzione? Devo restituire EmptyResult?

Per quanto ho capito questo è un bug - I submitted it nel tracker del problema del progetto.

risposta

5

Dal momento che si sta utilizzando ASP.NET MVC, è necessario utilizzare questo codice:

using DotNetOpenAuth.Messaging; // required for the extension method to work 

    return relyingParty.CreateRequest(openid).RedirectingResponse.AsActionResult(); 

Apparentemente ASP.NET di solito genera un'eccezione a seguito della chiamata RedirectToProvider(), ma non sempre. Ma il codice sopra funzionerà ed è più compatibile con MVC.

+0

Grazie, controllerò. – ripper234

+0

Non compilato. 'DotNetOpenAuth.Messaging.OutgoingWebResponse' non contiene una definizione per 'AsActionResponse' – ripper234

+0

Hai aggiunto l'istruzione using nella parte superiore del file? E stai prendendo di mira .NET 3.5? –