![](/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.