2010-04-27 98 views
5

方法DotNetOpenAuth.OpenId.RelyingParty.IAuthenticationRequest.RedirectToProvider()是记录有去无回:IAuthenticationRequest.RedirectToProvider不应该返回,但它确实

重定向用户代理到 供应商进行认证。当前页面的执行 在 这个调用后终止。

然而,它在最新的实现(3.4.3)下返回。我正在使用以下代码:

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"); 
    } 

    ... 
} 

(与“永远不会到达这里”的线被到达)。我需要从这个方法返回一个ActionResult ...

  1. 这是一个已知的错误?
  2. 有没有一个aorkaround?我应该返回EmptyResult吗?

据我了解这是一个bug - I submitted it在项目问题跟踪。

回答

5

由于您使用ASP.NET MVC,您应使用此代码:

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

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

显然ASP.NET通常会抛出一个异常作为RedirectToProvider()调用的结果,但并非总是如此。但上面的代码将工作,并更多的MVC友好。

+0

谢谢,我会检查出来。 – ripper234 2010-04-28 13:27:17

+0

不能编译。 'DotNetOpenAuth.Messaging.OutgoingWebResponse'不包含'AsActionResponse'的定义 – ripper234 2010-04-29 23:36:55

+0

您是否在文件顶部添加了using语句?你的目标是.NET 3.5吗? – 2010-04-29 23:49:22

相关问题