2010-11-12 7 views
4

Je viens de mettre à jour mon projet MVC2 pour exécuter MVC3 (RC). Tout fonctionne comme prévu sauf pour un problème.ASP.NET MVC3 - ActionResult rendu DotNetOpenAuth WebResponse en tant que chaîne

Je suis en cours d'exécution DotNetOpenAuth, mais quand je vais à authentifier, ma page rend la chaîne

DotNetOpenAuth.Messaging.OutgoingWebResponseActionResult

au lieu de l'authentification (qui a travaillé dans l'application MVC2)

J'ai trouvé cette question elsewhere on SO, et j'ai fait ce qui a été suggéré, mais en vain.

Voici un extrait de mon web.config

</configSections> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="System.Web.Mvc" 
       publicKeyToken="31bf3856ad364e35"/> 
      <bindingRedirect oldVersion="2.0.0.0" newVersion="3.0.0.0"/> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 
<system.web.webPages.razor> 

Ce qui pourrait bien être la cause de ce problème?

Si elle aide, voici le code du contrôleur qui travaillait avant MVC3

''# <ValidateInput(False)> _ ''# this code is commented out so that it displays properly on StackOverflow - It's not really commented out in the project. 
    Public Function Authenticate(ByVal go As String) As ActionResult 
     Dim response As IAuthenticationResponse = openid.GetResponse() 
     If response Is Nothing Then 
      ''# Stage 2: user submitting Identifier 
      Dim id As Identifier 

      If Identifier.TryParse(Request.Form("openid_identifier"), id) Then 

       Try 
        Return openid.CreateRequest(Request.Form("openid_identifier")).RedirectingResponse.AsActionResult() 
       Catch ex As ProtocolException 
        ViewData("Message") = "Woops! " & ex.Message 
        Return View("Login") 
       End Try 

      Else 

       ViewData("Message") = "Woops! Invalid identifier" 
       Return View("Login") 
      End If 
     Else 
      ''# Stage 3: OpenID Provider sending assertion response 
      Select Case response.Status 
       Case AuthenticationStatus.Authenticated 

        If Not OpenIDService.IsOpenIdAssociated(response.ClaimedIdentifier) Then 
         ''# All of this happens if the user logging in does 
         ''# not currently have an account associated with 
         ''# their OpenId. We probably want to handle this a 
         ''# little differently by sending them to a view that 
         ''# allows them to confirm account creation or try 
         ''# again. 
         ''# TODO: Create an Authenticate View and a CreateUser ActionResult (without a View) 
         UserService.AddUser(response.ClaimedIdentifier, response.FriendlyIdentifierForDisplay) 
         UserService.SubmitChanges() 

         ActivityLogService.AddActivity(OpenIDService.GetOpenId(response.ClaimedIdentifier).UserID, _ 
                  ActivityLog.LogType.UserAdded, _ 
                  HttpContext.Request.UserHostAddress) 

        Else 
         ActivityLogService.AddActivity(OpenIDService.GetOpenId(response.ClaimedIdentifier).UserID, _ 
                  ActivityLog.LogType.UserLogin, _ 
                  HttpContext.Request.UserHostAddress) 
        End If 

        ''# Again, we want to make sure to associate the users 
        ''# actions with an entry in the ActivityLog for further 
        ''# use with Badges 
        ActivityLogService.SubmitChanges() 


        ''# Create the authentication cookie. This cookie 
        ''# includes the AuthUserData information in the 
        ''# userData field of the FormsAuthentication Cookie. 
        Dim authUser As Authentication.AuthUserData = New Authentication.AuthUserData(OpenIDService.GetOpenId(response.ClaimedIdentifier).User) 
        HttpContext.Response.Cookies.Add(Authentication.CustomAuthentication.CreateAuthCookie(response.ClaimedIdentifier, _ 
                              authUser, _ 
                              True)) 
        authUser = Nothing 

        If Not String.IsNullOrEmpty(go) Then : Return Redirect(go) 
        Else : Return RedirectToAction("Index", "Events") 
        End If 

       Case AuthenticationStatus.Canceled 
        ViewData("Message") = "Canceled at provider" 
        Return View("Login") 

       Case AuthenticationStatus.Failed 
        ViewData("Message") = response.Exception.Message 
        Return View("Login") 

      End Select 
     End If 
     Return New EmptyResult() 
    End Function 

Répondre

5

Eh bien cela semble avoir résolu le problème ... Dois-je utiliser une autre version de DotNetOpenAuth? Ma version actuelle est [Version - 3.4.3.10143]

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

Vous pouvez mise à niveau vers la dernière version de DotNetOpenAuth, car la version actuelle est v3.4.5, mais elle ne résoudra pas ce problème. DotNetOpenAuth se compile contre MVC 1.0 afin qu'il fonctionne pour les installations plus anciennes. Redirections de liaison est la bonne solution ici. –

+0

merci merci! Cela m'embêtait depuis un certain temps. l'ajouter à mon web.config a fait l'affaire. –

0

Juste pour construire sur la réponse de chasse vous pouvez définir ancienneversion comme une gamme, vous permettant d'économiser l'écrire plusieurs fois

</configSections> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
       <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
<system.web.webPages.razor>