我一直在围绕一个ASP .Net MVC应用程序,它将从不同站点以不同配置(因此我无法使用FormsAuthentication SSO方式)登录请求。我决定解决这个问题的方式是创建临时登录请求令牌,因此每个令牌只能使用一次,并且使用这些令牌,应用程序将进行用户会话。与会话状态相同的项目中的Web API和MVC
为了避免不必要地生成令牌,我想先询问服务器是否用户尚未登录。我决定尝试通过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默认情况下不处理会话状态;你必须调整它,所以它可以,而且我不知道这两个会话是否会相同。
我不确定哪一个是正确的路要走,或者如果我应该尝试另一种解决方案来解决这个问题。
谢谢。
谢谢。有效! 你说得对。通过将响应作为Json发送,即使它是一个Action Result,客户也可以读取答案。 你对另一个也是对的。我将开始将所有内容都发送给Json,并看看它是如何实现的。 –