2011-01-16 15 views
0

Ich frage mich, was ich in diesem Fall zurückgeben sollte. Mein UI und Service Layer sind in verschiedenen Projekten.Was sollte ich von meiner Serviceebene zurückgeben? DotNetOpenAuth

Dies ist, was

geschieht -> User auf der Website kommt -> wählt Benutzer OpenID-Provider und Hits anmelden -> Post

Controller zurück
[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 Domäne enthält Klasse.

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 ist dies, wo ich verloren gehen, da sie so viele Dinge, die ich zurückkehren konnte.

ich zurückkehren konnte

return req.RedirectingResponse.AsActionResult() 

aber ich denke, das ist wie jetzt schlecht wäre ich auf asp.net MVC Actionverlasse mich und wenn ich diesen Service Schicht aus einem anderen Projekt sagen verwenden (vielleicht habe ich eine Webservice das verbindet sich mit einer mobilen Anwendung). Es wird nicht gut funktionieren.

Ich könnte return OutgoingWebResponse aber ich bin nicht wirklich sicher, was ich damit machen soll, sobald ich es zurückbekomme.

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

Schließlich konnte ich meine Domain Object (OpenId) mit einem von denen, kehre ich oben in aufgelistet.

Antwort

0

Sie könnten zurückkehren ein 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; 
    } 
} 

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(); 
} 
Verwandte Themen