如何在所有请求中创建共享库?

问题描述 投票:0回答:2

我是后端开发的初学者。我有一个简单的.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
        .....
        .....
    }

}

c# asp.net .net asp.net-core .net-core
2个回答
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++;
  }
}

0
投票

主要问题是控制器本身的工作方式。

控制器的寿命只有在发出请求时,据我所知,它们将被弃置。

IE:向/ api / controller发出请求时,会旋转一个新实例来处理该请求,然后将其处置。

您想要做的是保持某种形式的持久性。我建议您使用一种日志记录工具,将其注入到控制器中以记录它已被访问的时间,然后您可以从中提取调用它的次数。或者在您的上下文中有一个模型,只要对控制器进行调用,就可以对其进行更新。

与仅将静态变量粘贴在其中相比,这两种方法都是线程安全的

© www.soinside.com 2019 - 2024. All rights reserved.