范围方法
AsActionResult()
does not work. I get string "DotNetOpenAuth.Messaging.OutgoingWebResponseActionResult" to response instead of redirect to provider. namespace
using DotNetOpenAuth.Messaging;
其中包括。 问题在哪里?
[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");
}
}
}
}
}