DotNetOpenAuth; AsActionResult 不起作用

发布于 2024-12-10 12:07:59 字数 3405 浏览 0 评论 0原文

扩展方法

AsActionResult()

不起作用。我得到字符串“DotNetOpenAuth.Messaging.OutgoingWebResponseActionResult”来响应,而不是重定向到提供程序。 命名空间

using DotNetOpenAuth.Messaging;

已包含在内。问题出在哪里?

[额外] 我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.OpenId;
using DotNetOpenAuth.OpenId.RelyingParty;
using System.Web.Security;
    public class UserController : Controller
    {
        private static OpenIdRelyingParty openIdProvider = new OpenIdRelyingParty();

        public ActionResult Authenticate(string userOpenId)
        {
            // Ответ с сайта провайдера.
            IAuthenticationResponse response = openIdProvider.GetResponse();

            // response равен null, если запроса на OpenID провайдер мы не делали.
            if (response == null)
            {
                Identifier id;
                // Пытаемся распарсить OpenID клиента.
                if (Identifier.TryParse(userOpenId, out id))
                {
                    try
                    {
                        // Делаем редирект на сайт провайдера OpenID
                        return
                            openIdProvider
                            .CreateRequest(userOpenId)
                            .RedirectingResponse
                            .AsActionResult(); // Расширение для MVC
                    }
                    catch (ProtocolException ex)
                    {
                        ViewData["Message"] = ex.Message;
                    }
                }
                else
                {
                    // Не корректный OpenID клиента
                    ViewData["Message"] = "Invalid identifier";
                }
                return View("Login");
            }
            else
            {
                // Ответ с сайта провайдера OpenID
                switch (response.Status)
                {
                    // Успешная аутентификация
                    case AuthenticationStatus.Authenticated:
                        {
                            Session["FriendlyIdentifier"] = response.FriendlyIdentifierForDisplay;
                            // Аутентифицированы по cookies.
                            FormsAuthentication.SetAuthCookie(response.ClaimedIdentifier, false);
                            return RedirectToAction("Index", "Home");
                        }
                    // Аутентификация была отменена пользователем
                    case AuthenticationStatus.Canceled:
                        {
                            ViewData["Message"] = "Canceled at provider";
                            return View("Login");
                        }
                    // Аутентификация не удалась из за ошибки.
                    case AuthenticationStatus.Failed:
                        {
                            ViewData["Message"] = response.Exception.Message;
                            return View("Login");
                        }
                    // При прочих, делаем редирект на главную.
                    default:
                        {
                            return RedirectToAction("Index", "Home");
                        }
                }
            }
        }


    }

extention method

AsActionResult()

does not work. I get string "DotNetOpenAuth.Messaging.OutgoingWebResponseActionResult" to response instead of redirect to provider.
namespace

using DotNetOpenAuth.Messaging;

is included. Where is problem?

[ADDED]
my code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.OpenId;
using DotNetOpenAuth.OpenId.RelyingParty;
using System.Web.Security;
    public class UserController : Controller
    {
        private static OpenIdRelyingParty openIdProvider = new OpenIdRelyingParty();

        public ActionResult Authenticate(string userOpenId)
        {
            // Ответ с сайта провайдера.
            IAuthenticationResponse response = openIdProvider.GetResponse();

            // response равен null, если запроса на OpenID провайдер мы не делали.
            if (response == null)
            {
                Identifier id;
                // Пытаемся распарсить OpenID клиента.
                if (Identifier.TryParse(userOpenId, out id))
                {
                    try
                    {
                        // Делаем редирект на сайт провайдера OpenID
                        return
                            openIdProvider
                            .CreateRequest(userOpenId)
                            .RedirectingResponse
                            .AsActionResult(); // Расширение для MVC
                    }
                    catch (ProtocolException ex)
                    {
                        ViewData["Message"] = ex.Message;
                    }
                }
                else
                {
                    // Не корректный OpenID клиента
                    ViewData["Message"] = "Invalid identifier";
                }
                return View("Login");
            }
            else
            {
                // Ответ с сайта провайдера OpenID
                switch (response.Status)
                {
                    // Успешная аутентификация
                    case AuthenticationStatus.Authenticated:
                        {
                            Session["FriendlyIdentifier"] = response.FriendlyIdentifierForDisplay;
                            // Аутентифицированы по cookies.
                            FormsAuthentication.SetAuthCookie(response.ClaimedIdentifier, false);
                            return RedirectToAction("Index", "Home");
                        }
                    // Аутентификация была отменена пользователем
                    case AuthenticationStatus.Canceled:
                        {
                            ViewData["Message"] = "Canceled at provider";
                            return View("Login");
                        }
                    // Аутентификация не удалась из за ошибки.
                    case AuthenticationStatus.Failed:
                        {
                            ViewData["Message"] = response.Exception.Message;
                            return View("Login");
                        }
                    // При прочих, делаем редирект на главную.
                    default:
                        {
                            return RedirectToAction("Index", "Home");
                        }
                }
            }
        }


    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

岛歌少女 2024-12-17 12:07:59

我找到了解决方案 - 需要检查 web.config 并确保所有库都编译为 .NET 3.0。
正确的按键:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly xmlns="">
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

错误的:

  <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>
      <dependentAssembly xmlns="">
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

I found solution - need to check web.config and be sure, that all libraries compiled to .NET 3.0.
Correct keys:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly xmlns="">
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

incorrect:

  <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>
      <dependentAssembly xmlns="">
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文