2

OpenIDサービスプロバイダーにいくつかの属性を要求するようにコードを設定しようとしています。同時に、ActionResultを返したいと思います。

これがOpenIdサンプルMVCプロジェクトのコードです(DotNetOpenId / DotNetOpenAuth Webサイトから直接出てきます)...

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()にする方法がわかりません...

必要な属性を定義してActionViewを返すことができるopenId.CreateRequestを作成するにはどうすればよいですか?

4

1 に答える 1

1

あなたは元気です。2つのアプローチを組み合わせるだけです。

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 に答える