2017-04-17 124 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