Question

Je me demande ce que dois-je retourner dans ce cas. Mon Ui et la couche de service sont dans différents projets.

Voici ce qui se passe

-> utilisateur arrive sur le site -> L'utilisateur choisit fournisseur OpenID et coups de connexion -> Revenir au contrôleur

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

        }


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

Alors je prends dans un ViewModel qui contient ma classe de domaine.

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

Jusqu'à présent, dans mon 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;
        }

Maintenant, c'est là que je me perds depuis leur a tant de choses que je pourrais revenir.

Je pourrais revenir

return req.RedirectingResponse.AsActionResult()

Cependant, je pense que ce serait mauvais que maintenant je dépendais asp.net mvc ActionResult et si je dis utiliser cette couche de service pour un autre projet (peut-être j'ai un webservice qui se connecte à une application mobile). Il ne sera pas ne fonctionnera pas à bien.

Je pourrais return OutgoingWebResponse mais je ne suis pas vraiment sûr de ce qu'il faut faire avec elle une fois que je le récupérer.

Je pourrais aussi revenir le IAuthenticationRequest ce qui est généré à partir createRequest ()

Enfin, je pourrais retourner mon objet Domaine (OpenId) avec l'un de ceux que j'énumérés ci-dessus en elle.

Était-ce utile?

La solution

Vous pourriez retourner un 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;
    }
}

puis dans votre contrôleur:

[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();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top