2009-12-21 9 views
3

En utilisant l'exemple suivant: http://www.west-wind.com/Weblog/posts/899303.aspxredirect ActionResult rend l'utilisation ToString()

La ligne suivante ...

return req.RedirectingResponse.AsActionResult();

rend la chaîne "DotNetOpenAuth.Messaging.OutgoingWebResponseActionResult". Il s'agit de la classe renvoyée en tant que ActionResult dans la ligne telle qu'elle a été publiée. Est-ce que quelqu'un sait pourquoi je reçois le nom de la classe en tant que chaîne au lieu d'une redirection réelle?

Thnx à l'avance!

+0

Quel est le type de retour dans votre fonction? –

+0

ActionResult ... voir l'exemple dans l'url ... la fonction est [AcceptVerbs (HttpVerbs.Post | HttpVerbs.Get), ValidateInput (false)] public ActionResult OpenIdLogOn (string returnUrl) {...} – promontis

+0

IMO il n'y a rien de mal avec l'exemple de code fourni dans le lien, pas plus que la librairie DotNetOpenAuth. J'ai vérifié le code plusieurs fois et il n'y a pas beaucoup de code qui pourrait être faux. Je pense que l'erreur * est quelque part dans le routage ou web.config ... la question est où exactement. – promontis

Répondre

4

Est-ce que vous avez plusieurs versions de MVC dans votre répertoire Bin et votre serveur Web? Il me semble que si vous aviez plusieurs assemblys (les différentes versions) des types MVC comme ActionResult chargés dans votre AppDomain, et la méthode AsActionResult a retourné une version et votre application web MVC a utilisé une version différente, que cela pourrait juste sauver avec ToString . Quelle version d'ASP.NET MVC utilisez-vous? La méthode AsActionResult de DotNetOpenAuth a été compilée par rapport à la version 1.0 RTM du framework MVC. Si vous utilisez ASP.NET MVC 2 (inclus avec .NET 4.0), je pourrais voir cela peut-être un problème.

Je crois que si vous ajoutez cet extrait à votre fichier web.config de MVC 2, qu'il vous permettra d'utiliser la construction officielle de DotNetOpenAuth de sorte que vous ne devez pas construire votre propre:

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

Cela pourrait être le cas en effet! Je vais essayer dès que possible! – promontis

+0

J'ai changé la référence à MVC 2. Initialement, j'ai reçu une exception disant que la signature n'était pas valide, alors je l'ai supprimé. Je reçois maintenant l'erreur suivante (ce qui semble beaucoup mieux que le résultat précédent): doit utiliser le rewriter lors de l'utilisation Contract.Requires à ContractHelper.TriggerFailureImplementation (ContractFailureKind genre, String displayMessage, String UserMessage, String conditionText, Exception innerException) à ContractHelper.TriggerFailure (type ContractFailureKind, chaîne displayMessage, chaîne userMessage, chaîne conditionText, Exception innerException) ... – promontis

+0

Cette erreur est due à ce qui suit: http://social.msdn.microsoft.com/Forums/fr/codecontracts/thread/8f2a5842-7e18-42bf-b550-a30eb4c52817 Donc, fondamentalement, DotNetOpenAuth ne peut pas cibler MVC 2? – promontis

1

une autre solution, qui travaille pour moi avec .Net 3.5 et MVC 2.

Au lieu de

var authRequest = relyingParty.CreateRequest(....); 
.... 
return authRequest.RedirectingResponse.AsActionResult(); 

utilisation

var authRequest = relyingParty.CreateRequest(....); 
.... 
authRequest.RedirectToProvider(); 
Response.End(); 
return new EmptyResult();