DotNetOpenAuth; AsActionResult не работает - PullRequest
2 голосов
/ 16 октября 2011

метод расширения

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 Ответ

3 голосов
/ 17 октября 2011

Я нашел решение - нужно проверить 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...