2009-12-21 68 views
3

使用下面的示例:http://www.west-wind.com/Weblog/posts/899303.aspx的ActionResult重定向呈现使用的ToString()

下面的行...

return req.RedirectingResponse.AsActionResult();

呈现字符串 “DotNetOpenAuth.Messaging.OutgoingWebResponseActionResult”。 这是在发布的行中作为ActionResult返回的类。有谁知道为什么我得到的类名字符串而不是实际的重定向?

日Thnx提前!

+0

什么是你的函数的返回类型? – 2009-12-21 22:57:14

+0

ActionResult ...请参阅url中的示例...该函数是[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get),ValidateInput(false)] public ActionResult OpenIdLogOn(string returnUrl){...} – promontis 2009-12-21 23:03:39

+0

IMO链接中提供的代码示例没有任何问题,DotNetOpenAuth库也没有错。我已经多次检查了代码,并且没有太多可能会出错的代码。我认为*错误*是在路由或web.config中的某个地方...问题在哪里。 – promontis 2009-12-21 23:26:54

回答

4

难道说你有你的Bin目录和Web服务器的MVC的多个版本?这让我觉得,如果你有MVC的类型,如ActionResult加载到你的AppDomain中的多个组件(不同的版本),以及AsActionResult方法返回一个版本和你的MVC的Web应用程序使用不同的版本,它可能只是挽救了ToString 。你运行的是什么版本的ASP.NET MVC? DotNetOpenAuth的AsActionResult方法是针对MVC框架的1.0 RTM版本编译的。如果您使用的是ASP.NET MVC 2(包含在.NET 4.0中),我可以看到这可能是一个问题。

我相信,如果你这个片段添加到您的MVC 2的web.config文件,它可以让你使用DotNetOpenAuth的正式建立,所以你不必建立自己的:

<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

确实如此!尽快尝试! – promontis 2009-12-22 17:39:03

+0

我已经改变了对MVC 2的引用。最初,我得到了一个异常,说签名是无效的,所以我删除了它。我现在得到以下错误(这似乎好了很多,然后前面的结果): 使用Contract.Requires 时必须使用重写在ContractHelper.TriggerFailureImplementation(ContractFailureKind样,字符串displayMessage,字符串userMessage,字符串conditionText,异常InnerException) at ContractHelper.TriggerFailure(ContractFailureKind kind,String displayMessage,String userMessage,String conditionText,Exception innerException)... – promontis 2009-12-23 00:31:11

+0

此错误是由于以下原因:http://social.msdn.microsoft.com/Forums/en/codecontracts /线程/ 8f2a5842-7e18-42bf-B550-a30eb4c52817 所以,基本上,DotNetOpenAuth不能定位MVC 2? – promontis 2009-12-23 19:13:13

1

另一种解决方案,为我工作与.net 3.5和MVC 2

而不是

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

使用

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