Что я должен вернуть со своего уровня обслуживания?DotNetOpenAuth - PullRequest
0 голосов
/ 17 января 2011

Мне интересно, что я должен вернуть в этом случае. Мой пользовательский интерфейс и уровень обслуживания находятся в разных проектах.

Вот что происходит

-> Пользователь заходит на сайт -> Пользователь выбирает провайдера 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 и, если я скажу, использовать этот сервисный слой для какого-то другого проекта (возможно, у меня есть веб-сервис, который подключается к мобильному приложению). Это не сработает.

Я мог бы return OutgoingWebResponse, но я не совсем уверен, что делать с ним, как только получу его обратно.

Я также мог бы вернуть запрос IAuthenticationRequest, сгенерированный из CreateRequest ()

Наконец, я могу вернуть свой доменный объект (OpenId) с одним из перечисленных выше.

1 Ответ

0 голосов
/ 18 января 2011

Вы можете вернуть 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();
}
...