【问题标题】:Web API and MVC in the same project with Session StatesWeb API 和 MVC 在同一个项目中的会话状态
【发布时间】: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


    【解决方案1】:

    MVC 操作不应返回布尔值。这并不一定意味着您需要返回一个完整的视图对象,因此查询该操作将导致一个完整的 html,这很难解析。

    您可以强制您的操作方法返回 JSON 或纯文本。操作的类型仍然是ActionResult(可能是可选的JsonResult),但您可以返回Json()Content()

    例如:

    public ActionResult UserIsLogged(int userId) 
    {
        if (....)
        {
            return Json(true);
        }
        return Json(false); 
    }
    

    我还建议您的 Web API 操作也返回 json,而不是原语。任何客户端都将更容易解析响应。

    【讨论】:

    • 谢谢。有效!你是对的。通过将响应作为 Json 发送,即使是操作结果,客户端也可以读取答案。你对另一个也是正确的。我将开始以 Json 的形式发送所有内容,看看效果如何。
    猜你喜欢
    • 2016-07-06
    • 2019-09-18
    • 2015-06-05
    • 1970-01-01
    • 2018-12-06
    • 2014-02-17
    • 2013-09-06
    • 2018-07-31
    • 2017-06-11
    相关资源
    最近更新 更多