2011-01-16 6 views
0

私はこの場合何を返すべきか疑問に思っています。私のUiとサービス層は異なるプロジェクトにあります。サービス層から何を返すべきですか? DotNetOpenAuth

これは

何が起こるかである - >ユーザーがサイトに来る - >ユーザーがOpenIDプロバイダを選択し、ログインを打つ - >ポストバックコントローラ

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

     } 


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

にだから私は自分のドメインが含まれているViewModelにに取りますクラス。私は返すことができますので、多くの物事が自分であるため、私は迷子にどこ

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

私SendOpenIdRequest

でこれまで

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

は今、これがあります。

私は今、私はasp.net MVCのActionResultに依存していると私はいくつかの他のプロジェクト(このサービス層を使用して言うならば、多分私はWebサービスを持っているように、これは悪いことだと思うしかし、私は

return req.RedirectingResponse.AsActionResult() 

を返すことができますモバイルアプリケーションに接続する)。それはうまく動作しません。

私はreturn OutgoingWebResponseでしたが、戻ってしまったらどうしたらいいのか分かりません。私もCreateRequest(から生成されたものIAuthenticationRequestを返すことができ

最後に、私はそれに上記のものの一つで、私のドメインオブジェクト(OpenIDの)を返すことができます。

答えて

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(); 
} 
関連する問題