我是后端开发的初学者。我有一个简单的.Net Core Web API应用程序。我想存储一个整数以计算调用的请求量。
因此,每一次接听电话,我都将counter
加1。但是counter
由于构造函数调用而将每个请求重新初始化为0。如何在所有请求中创建共享的counter
,以便计算被叫请求的数量。
我的简化班是这样:
[ApiController]
[Route("/")]
public class WeatherForecastController : ControllerBase
{
DataContext _context;
int counter ;
public WeatherForecastController(DataContext context){
counter = 0; //initialized with 0
_context = context;
}
[HttpGet]
public string Get()
{
counter++; //every time 0 to 1
.....
.....
}
[HttpPost(".....")]
public async Task UploadFile([FromForm] string ...)
{
counter++; //every time 0 to 1
.....
.....
}
[HttpGet("....")]
public string Get2(string ...)
{
counter++; //every time 0 to 1
.....
.....
}
[HttpPost(".....")]
public async Task Post4([FromForm] string ...)
{
counter++; //every time 0 to 1
.....
.....
}
}
答案 0 :(得分:3)
我认为以下代码可以为您提供帮助,您可以通过将变量定义为静态来实现
[ApiController]
[Route("/")]
public class WeatherForecastController : ControllerBase
{
DataContext _context;
static int counter = 0;
public WeatherForecastController(DataContext context){
_context = context;
}
[HttpGet]
public string Get()
{
counter++;
}
[HttpPost("UploadFile")]
public async Task UploadFile()
{
counter++;
}
}
答案 1 :(得分:0)
主要问题是控制器本身的工作方式。
根据我所知,只有当提出请求时,控制器的生命周期才会被丢弃。
IE:当向/ api / controller发出请求时,会旋转一个新实例来处理该请求,然后将其丢弃。
您想要做的是保持某种形式的持久性。我建议您使用一种日志记录工具,将其注入到控制器中,以记录该日志已被访问,然后您可以从中提取调用它的次数。 或者在您的上下文中有一个模型,只要对控制器进行调用,就可以对其进行更新。
与仅在其中粘贴静态变量相比,这两种方法都是线程安全的