Frage

Ich frage mich, was ich in diesem Fall zurückkehren. Meine Ui und Service-Layer sind in verschiedenen Projekten.

Dies ist, was passiert,

-> Benutzer auf der Website kommt -> Benutzer wählt OpenID-Provider und Hits anmelden -> Post zurück an den Controller

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

        }


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

Also nehme ich in einem Ansichtsmodell, dass meine Domain-Klasse enthält.

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

Bisher in meinem 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;
        }

Nun, das ist, wo ich verloren gehen, da sie so viele Dinge, die ich zurückkehren konnte.

Ich konnte zurückkehren

return req.RedirectingResponse.AsActionResult()

Aber ich denke, dies als jetzt schlecht wäre ich abhängig von asp.net MVC Action und wenn ich diesen Service Schicht aus einem anderen Projekt sagen verwenden (vielleicht habe ich eine Webservice, dass eine Verbindung zu einer mobilen Anwendung). Es wird nicht funktionieren nicht zu gut.

Ich konnte return OutgoingWebResponse aber ich bin nicht wirklich sicher, was damit zu tun, wenn ich es zurück.

Ich kann auch die IAuthenticationRequest zurückkehren, was aus erzeugeAnf erzeugt wird ()

Endlich konnte ich meine Domain-Objekt zurück (OpenId) mit einer von denen, die ich in sie oben aufgeführt sind.

War es hilfreich?

Lösung

Sie könnten eine OutgoingWebResponse zurück:

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;
    }
}

und dann in Ihrem Controller:

[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();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top