2014-09-11 138 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>