DotNetOpenAuth; AsActionResult不起作用

时间:2011-10-16 19:07:10

标签: asp.net-mvc-3 dotnetopenauth

扩展方法

AsActionResult()

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

using DotNetOpenAuth.Messaging;

包括在内。哪里有问题?

[ADDED] 我的代码:

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


    }

1 个答案:

答案 0 :(得分:3)

我找到了解决方案 - 需要检查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>