DotNetOpenAuth; AsActionResult 不起作用
扩展方法
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我找到了解决方案 - 需要检查 web.config 并确保所有库都编译为 .NET 3.0。
正确的按键:
错误的:
I found solution - need to check web.config and be sure, that all libraries compiled to .NET 3.0.
Correct keys:
incorrect: