IAuthenticationRequest.RedirectToProvider不应该返回,但确实如此

时间:2010-04-27 19:39:30

标签: .net asp.net asp.net-mvc openid dotnetopenauth

记录方法DotNetOpenAuth.OpenId.RelyingParty.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吗?
  3. 据我所知,这是项目问题跟踪器中的错误 - I submitted it

1 个答案:

答案 0 :(得分:5)

由于您使用的是ASP.NET MVC,因此您应该使用以下代码:

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

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

显然,ASP.NET通常会因RedirectToProvider()调用而抛出异常,但并非总是如此。但上面的代码将起作用,并且更加适合MVC。