2017-04-17 39 views
-1

每個HTTP請求我有一個關於在Asp.net核心控制器收集名稱的問題,它看起來像Asp.net核心控制器是在刷新從Javascript

[Route("[controller]")] 
public class HomeController : Controller 
{ 
    private List<string> names = new List<string>(); 

    [HttpPost] 
    [Route("SendName")] 
    public bool SendName(string name) 
    { 
     this.names.Add(name); 
     return true; 
    } 
} 

在瀏覽器中,我使用JavaScript(Angular2 )發送名稱

var headers = new Headers(); 
headers.append('Content-Type', 'application/json'); 
headers.append("Accept", 'application/json'); 
this.http.post('http://localhost/Home/SendName/', JSON.stringify({name: name}), { headers: headers }).toPromise() 
     .then(res => res.json().data) 
     .catch(e=>alert(e)); 

現在,名稱可以發送到控制器。但是,每次運行JavaScript時,控制器都將刷新,並且控制器中的名稱屬性將爲空。因此,我無法在控制器中存儲任何數據。有什麼辦法可以解決這個問題嗎?謝謝

回答

2

對控制器的每個請求都會創建該控制器的一個新實例,因此您的字段將被重新創建。

您可以創建一個單例服務,在您的控制器中使用它來保存名稱。

Startup註冊服務等在控制器

services.AddSingleton<IMyService, MyService>(); 

注入,並使用該服務,以保持names。這是一個單例服務,將爲應用程序創建一次。

0
  1. 控制器被用於通過的ControllerFactory(默認情況下是DefaultControllerFactory)Link每個請求創建。

  2. 同意Suren,另一種方法是你也可以將名稱屬性存儲在靜態類中。

  3. 做一個演示案例,我請求兩次,下面的圖片是結果。也許幫助ü:)

    static class result