2012-01-17 2 views
7

저는 ASP.Net MVC 4 Developer Preview를 통해 DotNetOpenAuth 샘플을 시험해 보았습니다.MVC 4.0이 포함 된 DotNetOpenAuth

나는 성공적으로 테스트 페이지에서 내 작업을 호출하지만, 이상한 문제에 코드 중 하나로 인해 라인을 실행할 수 있습니다 : 나는 코드를 일으키는 줄을 주석이 전에 하나의 주석을 해제하면

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 

을 , 런타임 오류가 더 이상 표시되지 않습니다.

은 지금까지 나는 시도했다 :

<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) 올바른 네임 스페이스 유무 : :

1) 내가 올바른 리디렉션을 보장

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

그것은 나에게 보인다 DotNetOpenAuth dll이 MVC V 1.0.0에 대해 컴파일되었고 바인딩 리디렉션이 작동하지 않거나 확장 메서드가 사용되지 않는 메서드에 대해 작동했을 수 있습니다.

MVC 버전 : 4.0.0.0 DotNetOpenAuth 버전 : 3.4.7.11121

은 MVC 4 일이 점점에 어떤 도움을 크게 감상 할 수있다. MVC의 오류 화면 이미지가 더 다음과 같습니다 :

Image of Error Screen

업데이트 나는 AsActionResult이 확장 방법은 닷넷 4.0와 호환되지 않습니다 아마도 때문에, 문제의 원인 것으로 나타났습니다. request.RedirectingResponse에서 OutgoingWebResponse 객체를 가져올 수 있지만 ActionResult에 캐스트하는 방법을 알고 있어야합니다.

+0

예제 코드는 내가 볼 수있는 MVC4에서 작동하는 OpenId를 얻게합니다. 공급자 버튼을 호출 할 때 이미지 경로에서 JS 오류에 이르기까지 수많은 문제가 발생합니다. – Picflight

답변

6

바인딩 리디렉션이 손상된 것 같습니다. System.Web.Mvc가 두 번 나타나는 방식에 유의하십시오. 첫 번째 것이 올바른 것처럼 보이면 두 번째 것을 제거하십시오.

예, DNOA는 MVC 1.0에 대해 작성되었으며 이는 의도적으로 모든 MVC 버전에서 작동합니다 (적절한 리디렉션이 있음). 이것은 순전히 MVC 버전 일 뿐이며 .NET 4.0은 아닙니다.

+0

정말 예리한 눈이 있습니다. 고맙습니다!! 나는 미쳤다고 생각했다. –

+0

고마워요 고마워, 고마워, 고마워. :) .. 같은 문제가 생겼다. mvc3에서이 작업은 "bindingRedirect oldVersion ="1.0.0.0 "newVersion ="3.0.0.0 "/>". – labroo

관련 문제