c# ASP.. NET Core Web API:如何在调用不同方法之间在控制器中维护上下文 &g



c# ASP。. NET Core Web API:一般新手问题。尝试实现基本的异步请求-应答模式。基本思想是:

  1. 客户端调用POST {url}/DataProcessor/DataX与一些有效负载
  2. 客户端使用GET {url}/DataProcessor/DataXStatus检查事务的状态,直到返回200的HTTP状态码
  3. 客户端从上面的响应中获得xActionId,然后调用GET {url}/DataProcessor/GetResults/{xActionId}来检索数据处理的结果。

这就是我的控制器看起来像:当我调用DataXStatus方法(在正确调用DataX方法之后),_processData不在正确的状态,就像在DataX方法完成后它已经超出了范围。我做错了什么?DataProcessorController对象是否在任何一个方法完成后消失?正确的做法是什么?

Thanks in advance

[Route("[controller]")]
[ApiController]
public class DataProcessorController : ControllerBase
{
private ProcessData _processData = new ProcessData() ;
[HttpPost]
[Route("DataX")]
public IActionResult DataX([FromBody] xData value)
{
_processData.CalculateResult(value);
return Accepted();
}
[HttpGet]
[Route("DataXStatus")]
public IActionResult DataXStatus()
{
if(_processData.IsRunning())
{
return Accepted();
}
return Ok(new xDataStatus(){id = _processData.GetxActionId()});
}
[HttpGet]
[Route("GetResults/{xActionId}")]
public IActionResult GetResults(string xActionId)
{
return Ok(new xDataResults(){resX = _processData.GetResults()});
}
}

在我的手机上回答这个问题,所以请原谅我的打字错误。

基本上,每个请求都重新恢复类。api不保留以前请求的上下文,除非您正在跟踪的对象是静态的,这是我对此的第一个解决方案:

快捷快捷选项:

我建议你使用依赖注入。这让你可以选择运行你的' processdata '类作为一个单例。这基本上意味着它是静态的。

更好的选择:

另一种更正确的方法是使用已知的库。有大量的库是用来处理web api中的异步请求的。我认为你应该使用hangfire,它需要几分钟的时间来设置,也有大量的配置选项。

https://docs.hangfire.io/en/latest/getting-started/aspnet-core-applications.html

如果你需要进一步的帮助,请告诉我!

相关内容

  • 没有找到相关文章

最新更新