2

我正在尝试设置我的代码以向 OpenID 服务提供商请求一些属性。同时,我希望返回一个 ActionResult。

这是 OpenId 示例 MVC 项目中的代码(直接来自 DotNetOpenId / DotNetOpenAuth 网站)...

try
{
    return openid.CreateRequest(Request.Form["openid_identifier"])
        .RedirectingResponse
        .AsActionResult();
 }
 catch (ProtocolException ex)
 { ... }

这很好,但它没有显示我请求任何可选或必需的属性。所以,我尝试了以下(我自己的,未经测试的伪代码)....

var fetch = new FetchRequest();
fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
fetch.Attributes.AddRequired(WellKnownAttributes.Name.FullName);
fetch.Attributes.AddRequired(WellKnownAttributes.Name.Alias);
fetch.Attributes.AddRequired(WellKnownAttributes.Preferences.Language);
fetch.Attributes.AddRequired(WellKnownAttributes.Preferences.TimeZone);
fetch.Attributes.AddRequired(WellKnownAttributes.Person.Gender);

openId.CreateRequest(identifier.ToString()).AddExtension(fetch);

这似乎也很好。但是...我现在不知道如何要求结果是 ActionResult()...

如何创建一个 openId.CreateRequest 允许我定义一些必需的属性并返回一个 ActionView ?

4

1 回答 1

1

你做得很好。只需将这两种方法结合起来。

在你调用IAuthenticationRequest.AddExtension所有你想要的之后,只需调用IAuthenticationRequest.RedirectingResponse.AsActionResult().

try
{
    var request = openid.CreateRequest(Request.Form["openid_identifier"]);

    var fetch = new FetchRequest();
    fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
    fetch.Attributes.AddRequired(WellKnownAttributes.Name.FullName);
    fetch.Attributes.AddRequired(WellKnownAttributes.Name.Alias);
    fetch.Attributes.AddRequired(WellKnownAttributes.Preferences.Language);
    fetch.Attributes.AddRequired(WellKnownAttributes.Preferences.TimeZone);
    fetch.Attributes.AddRequired(WellKnownAttributes.Person.Gender);
    request.AddExtension(fetch);

    return request.RedirectingResponse.AsActionResult();
}
catch (ProtocolException ex)
{ ... }
于 2009-05-19T23:26:49.267 回答