我是后端开发的初学者。我有一个简单的.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
.....
.....
}
}
我认为以下代码可以为您提供帮助,您可以通过将变量定义为静态来做到这一点
[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++;
}
}
主要问题是控制器本身的工作方式。
控制器的寿命只有在发出请求时,据我所知,它们将被弃置。
IE:向/ api / controller发出请求时,会旋转一个新实例来处理该请求,然后将其处置。
您想要做的是保持某种形式的持久性。我建议您使用一种日志记录工具,将其注入到控制器中以记录它已被访问的时间,然后您可以从中提取调用它的次数。或者在您的上下文中有一个模型,只要对控制器进行调用,就可以对其进行更新。
与仅将静态变量粘贴在其中相比,这两种方法都是线程安全的