我有一个关于Asp.net核心控制器收集名称的问题,看起来像是
[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时,控制器都将刷新,控制器中的名称属性将为空。因此,我无法在控制器中存储任何数据。有什么方法可以解决这个问题吗?谢谢
答案 0 :(得分:2)
对控制器的每个请求都将创建该控制器的新实例,因此将重新创建您的字段。
您可以创建单件服务,并在控制器中使用它来保存名称。
在Startup
注册像
services.AddSingleton<IMyService, MyService>();
注入控制器并使用该服务来保存names
。它是一个单独的服务,将为应用程序创建一次。
答案 1 :(得分:0)
ControllerFactory为每个请求创建一个Controller(默认情况下是DefaultControllerFactory)Link。
同意Suren,另一种方法是你也可以将name属性存储在静态类中。
制作一个演示案例,我要求两次,结果是下面的图片。也许帮助你:))