【问题标题】:What should I return from my service layer? DotNetOpenAuth我应该从我的服务层返回什么? DotNetOpenAuth
【发布时间】:2011-06-10 03:12:14
【问题描述】:

我想知道在这种情况下我应该返回什么。我的 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),其中包含我上面列出的对象之一。

【问题讨论】:

    标签: asp.net-mvc-2 service-layer


    【解决方案1】:

    您可以返回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-18
      • 2011-06-13
      • 1970-01-01
      • 2014-08-19
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多