C# ASP.NET Core Web API:一般新手問題。嘗試實作基本的異步請求-回復模式。基本思想是:
POST {url}/DataProcessor/DataX帶有一些有效負載的客戶端呼叫- 客戶端使用 來檢查事務的狀態
GET {url}/DataProcessor/DataXStatus,直到200回傳HTTP 狀態碼 - 客戶端
xActionId從上面的回應中獲取,然后呼叫GET {url}/DataProcessor/GetResults/{xActionId}以檢索資料處理的結果。
這就是我的控制器的樣子:當我呼叫DataXStatus方法時(在正確呼叫DataX方法之后),狀態不正確,就像方法完成_processData后它已經超出范圍一樣。DataX我究竟做錯了什么?DataProcessorController任何一種方法完成后物件是否消失?這樣做的正確方法是什么?
提前致謝
[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()});
}
}
uj5u.com熱心網友回復:
在我的手機上回答這個問題,所以請原諒任何錯別字。
基本上,是的,每個請求都會對課程進行重新設定。除非您跟蹤的物件是靜態的,否則 api 不會保留先前請求的背景關系,這是我的第一個解決方案:
快速而骯臟的選擇:
我建議您為此使用依賴注入。這使您可以選擇將“proccessData”類作為單例運行。這基本上意味著它是靜態的。
更好的選擇:
另一種更正確的方法是為此使用已知的庫。有大量的庫是為處理 web api 中的異步請求而構建的。我認為您應該為此使用hangfire,設定需要幾分鐘,并且還有大量的配置選項。
https://docs.hangfire.io/en/latest/getting-started/aspnet-core-applications.html
如果您需要任何進一步的幫助,請告訴我!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/471696.html
標籤:C# asp.net 核心 哎呀 控制器 asp.net-core-webapi
下一篇:僅具有類方法與模塊的類中的繼承
