【问题标题】:IAuthenticationRequest.RedirectToProvider is not supposed to return, yet it doesIAuthenticationRequest.RedirectToProvider 不应该返回,但它确实返回
【发布时间】:2010-04-27 19:39:30
【问题描述】:

方法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. 有解决方案吗?我应该返回 EmptyResult 吗?

据我了解,这是项目问题跟踪器中的一个错误 - I submitted it

【问题讨论】:

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


    【解决方案1】:

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

    using DotNetOpenAuth.Messaging; // required for the extension method to work
    
        return relyingParty.CreateRequest(openid).RedirectingResponse.AsActionResult();
    

    显然 ASP.NET 通常会因RedirectToProvider() 调用而引发异常,但并非总是如此。但是上面的代码可以工作,而且对 MVC 更友好。

    【讨论】:

    • 不编译。 “DotNetOpenAuth.Messaging.OutgoingWebResponse”不包含“AsActionResponse”的定义
    • 您是否在文件顶部添加了 using 语句?你的目标是 .NET 3.5 吗?
    • 添加 using DotNetOpenAuth.Messaging; 对我有用,谢谢
    猜你喜欢
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 2021-03-12
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多