ASP.NET Web API会话数据

本文关键字:会话 数据 API Web NET ASP | 更新日期: 2023-09-27 18:21:30

我需要在Web API项目的会话数据中存储一个大对象。然后,我需要客户端上的几个HTML小部件在Web API会话中访问这些数据,并用它做不同的事情,比如绘制数据图形的图表小部件,列出数据的HTML表。我不必为每个客户端小部件重新计算那个大对象,而是需要一次性计算它并将其存储在会话数据中,这样在同一会话中运行在客户端上的任何小部件都可以在会话中的不同时间访问该数据,而不必等待服务器重新计算数据。

每个小部件都应该使用不同的GET请求url访问Web API服务器项目。

我很感激你的帮助。我可能对如何做到这一点有一个高水平的概述,但请允许我使用一些指导。

ASP.NET Web API会话数据

以下是如何做到这一点。

您的项目中可能有Repository(Repository Pattern),而在Repository中,您有一种方法来计算小部件等所需的结果。在存储库方法中定义数据计算的所有逻辑,然后在apiController Get-Request或GetById中,您可以调用该存储库,并可以创建一个会话变量,您可以在视图中使用该变量。如果您在前端使用Asp.Net Mvc,您可以执行相同的调用,将数据存储到Mvc Controller 中的会话中

public class YourControllerName:apiController
{
    public IQueryable<AnyNameListDTO> Get()
    {
        //Your other Code will go here 
        var session = HttpContext.Current.Session;
        if (session != null)
        {
            if (session["AnyName"] == null)
            {
                session["AnyName"] = TheRepository.YourMethodName();
            }
        }
    }
}

如果你正在使用你的Asp.NetMvc作为你的视图(UI),它将使用WebApi,那么你可以在你的控制器中创建相同的会话操作方法

public class YourControllerName:Controller
{
    public ActionResult Get()
    {
        //Your other Code will go here 
        Session["AnyName"] = TheRepository.YourMethodName();
    }
}   

您也可以使用HTML5本地存储。

利用HTML5本地存储将数据存储到其中,然后使用它。

已解决

从跨域.html页面检索Web API会话数据

跨域资源共享就是

ValuesController.csINWeb API)

namespace TestWEB_API.Controllers
{
  public class ValuesController : ApiController
  {
    // GET api/values
    public string Get()
    {
        var session = HttpContext.Current.Session;
        if (session != null)
        {
            if (session["Time"] == null)
                session["Time"] = DateTime.Now;
            return "Session Time: " + session["Time"];
        }
        return "Session is not working";
    }// End Get()
    ...
  }//End Class()
}//End Namespace

然后.html页面(在WEB API中!!!)在不同的.war 中

httpSessionTest.html

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
    <script type="text/javascript" src="../Desktop/jquery-2.1.1.js"></script>
</head>
<script>
// !!------------- THIS IS WHAT I NEEDED! ---------------!!
$(function()
{
        $.getJSON('http://localhost:Port/api/values', function(stringPayLoad)
        {
            alert(stringPayLoad);
            $("#dataP").text(stringPayLoad);
        });
});
</script>
<body>
<h3> Web API Session Test </h3>
<p id="dataP">!!! If you see this, it means that the session data didn't load. :(</p>
</body>
</html>