![](/img/trans.png)
[英]How to make HTTP call from Controller ? to Use web API's Asp.Net Core C#
[英]C# ASP.NET Core Web API: How to maintain context in the controller between calling different methods
C# ASP.NET 核心 Web API:一般新手问题。 尝试实现基本的异步请求-回复模式。 基本思想是:
POST {url}/DataProcessor/DataX
GET {url}/DataProcessor/DataXStatus
检查交易状态,直到返回 HTTP 状态码200
xActionId
,然后调用GET {url}/DataProcessor/GetResults/{xActionId}
来获取数据处理的结果。 这是我的 controller 的样子:当我调用DataXStatus
方法时(在正确调用DataX
方法之后),_processData 不在正确的_processData
中,就像它在DataX
方法完成后从 scope 中消失了。 我究竟做错了什么? 任何一种方法完成后DataProcessorController
object 是否消失? 这样做的正确方法是什么?
提前致谢
[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()});
}
}
在我的手机上回答这个问题,所以请原谅任何错别字。
基本上,是的,class 会根据每个请求重新染色。 api 不会保留以前请求的上下文,除非您跟踪的 object 是 static,这是我的第一个解决方案:
快速而肮脏的选择:
我建议您为此使用依赖注入。 这使您可以选择将“processData”class 作为 singleton 运行。这基本上意味着它是 static。
更好的选择:
另一种更正确的方法是为此使用已知的库。 web api 中有大量用于处理异步请求的库。 我认为你应该为此使用 hangfire,它需要几分钟的时间来设置并且还有大量的配置选项。
https://docs.hangfire.io/en/latest/getting-started/as.net-core-applications.html
如果您需要任何进一步的帮助,请告诉我!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.