Asp.net核心控制器在来自Javascript的每个http请求中刷新

时间:2017-04-17 06:15:09

标签: javascript c# asp.net-core

我有一个关于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时,控制器都将刷新,控制器中的名称属性将为空。因此,我无法在控制器中存储任何数据。有什么方法可以解决这个问题吗?谢谢

2 个答案:

答案 0 :(得分:2)

对控制器的每个请求都将创建该控制器的新实例,因此将重新创建您的字段。

您可以创建单件服务,并在控制器中使用它来保存名称。

Startup注册像

这样的服务
services.AddSingleton<IMyService, MyService>();

注入控制器并使用该服务来保存names。它是一个单独的服务,将为应用程序创建一次。

答案 1 :(得分:0)

  1. ControllerFactory为每个请求创建一个Controller(默认情况下是DefaultControllerFactory)Link

  2. 同意Suren,另一种方法是你也可以将name属性存储在静态类中。

  3. 制作一个演示案例,我要求两次,结果是下面的图片。也许帮助你:))

    static class result