2014-09-11 89 views
3

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

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

我很感激帮助。我可能会对如何做到这一点做一个高层次的概述,但是请我可以使用一些指导。

回答

5

这里是你如何做到这一点。

你可能在你的项目和仓库里有Repository(仓库模式),你有方法计算你想要的Widget结果等。 在仓库方法中定义你所有的数据计算逻辑,然后在你的apiController中获取Get Request或GetById,您可以调用该存储库并创建一个会话变量,您可以在View中使用该变量。如果您在前端使用Asp.Net Mvc,则可以在Mvc控制器中执行相同的将数据存储到会话中的调用

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.Net Mvc作为您的视图(UI),它将使用Web Api,那么您可以在insid中创建相同的会话e您的控制器操作方法

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

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

将HTML5本地存储存储数据用于该数据,然后使用它。

+0

+1 HTML5本地存储空间,这可能是存储拉尔数据量的最好的地方为每个客户。如果在另一端有足够的备用内存的整个计算机或智能设备时,为什么会阻塞服务器的内存? – mason 2014-09-11 01:38:39

+0

100%同意你HTML5本地存储我刚刚告诉他所有可能的选项 – ProgrammingNinja 2014-09-11 02:47:11

+0

@ProgrammingNinja我如何从不在Web API中的HTML页面访问会话数据?(只是一个独立的HTML页面)我认为这就是我需要 – 2014-09-11 21:30:17

1

解决

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

跨域资源共享是什么,这是

ValuesController.csIN在Web 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>