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