0

この場合、何を返せばいいのでしょうか。私のUiとサービスレイヤーは異なるプロジェクトにあります。

これが起こることです

->ユーザーがサイトにアクセス->ユーザーがopenIdプロバイダーを選択し、ログインを押します->コントローラーにポストバック

 [HttpPost]
        public ActionResult Login(LoginViewModel loginViewModel)
        {
           var test = accountService.SendOpenIdRequest(loginViewModel.OpenId);

        }


public class LoginViewModel
    {
        public OpenId OpenId { get; set; }
    }

そこで、ドメインクラスを含むViewModelを取り込みます。

 public class OpenId
    {
        public string Url { get; set; }
    }

これまでのところ、SendOpenIdRequestで

  public ?  SendOpenIdRequest(OpenId openId)
        {
            var openIdRelyingParty = new OpenIdRelyingParty();
            var response = openIdRelyingParty.GetResponse();

            Identifier id;
            if (Identifier.TryParse(openId.Url, out id))
            {
                try
                {
                    var req = openIdRelyingParty.CreateRequest(openId.Url);
                    return req.RedirectingResponse
                }
                catch (ProtocolException ex)
                {
                }
            }

            return null;
        }

今、これは私が迷子になる場所です。なぜなら、彼らは私が返すことができるものがたくさんあるからです。

戻ることができた

return req.RedirectingResponse.AsActionResult()

ただし、現在はasp.net mvc ActionResultに依存しているため、これは悪いことだと思います。このサービスレイヤーを他のプロジェクトに使用するとします(モバイルアプリケーションに接続するWebサービスがあるかもしれません)。それはうまくいきません。

できreturn OutgoingWebResponseましたが、取り戻したらどうしたらいいのかよくわかりません。

CreateRequest()から生成されたIAuthenticationRequestを返すこともできます

最後に、上記のいずれかを含むドメインオブジェクト(OpenId)を返すことができます。

4

1 に答える 1

0

OutgoingWebResponseあなたは:を返すことができます

public OutgoingWebResponse SendOpenIdRequest(OpenId openId)
{
    using (var openIdRelyingParty = new OpenIdRelyingParty())
    {
        var response = openIdRelyingParty.GetResponse();
        Identifier id;
        if (Identifier.TryParse(openId.Url, out id))
        {
            try
            {
                var req = openIdRelyingParty.CreateRequest(openId.Url);
                return req.RedirectingResponse
            }
            catch (ProtocolException ex)
            {
            }
        }
        return null;
    }
}

次に、コントローラーで:

[HttpPost]
public ActionResult Login(LoginViewModel loginViewModel)
{
    var response = accountService.SendOpenIdRequest(loginViewModel.OpenId);
    if (response == null)
    {
        ModelState.AddModelError(
            "openid_identifier", 
            "The specified login identifier is invalid"
        );
        return View();
    }
    return response.AsActionResult();
}
于 2011-01-18T07:47:15.727 に答える