【发布时间】:2015-09-06 01:49:40
【问题描述】:
我一直在处理一个 ASP .Net MVC 应用程序,该应用程序将从具有不同配置的不同站点接收登录请求(因此我不能使用 FormsAuthentication SSO 方式)。我决定解决这个问题的方法是创建临时登录请求令牌,因此每个令牌只能使用一次,并且使用这些令牌,应用程序将建立用户会话。
为了避免不必要地生成令牌,我想先询问服务器是否用户尚未登录。我决定通过 HttpClient 尝试这个。代码编写如下。
var client = new HttpClient { BaseAddress = new Uri("http://mywidget.com") };
client.Timeout = TimeSpan.FromMilliseconds(18000);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.GetAsync(String.Format("/userIsLogged/{0}", userId)).Result;
response.EnsureSuccessStatusCode();
bool isLogged = response.Content.ReadAsAsync<bool>().Result;
return isLogged;
我想出了两种可能的方法来进行验证。我在 Web API 和 MVC 中编写了相同的操作,如下所示。
[HttpGet]
public bool UserIsLogged(int userId)
{
return (HttpContext.Current.Session != null && ((int)HttpContext.Current.Session["userId"]) == userId);
}
我发现了两个问题,我不知道哪个更适合我的目的。
MVC动作以HTML形式返回答案,客户端显然无法处理答案,我还没有找到正确处理的方法。
API 动作可以处理答案,但 Web API 默认不处理会话状态;您必须对其进行调整以使其可以,而且我不知道两个会话是否会相同。
我不确定其中哪一个是正确的方法,或者我是否应该尝试另一种方法来解决这个问题。
谢谢。
【问题讨论】:
标签: c# asp.net-mvc asp.net-web-api session-state