簡體   English   中英

C# ASP.NET Core Web API:如何在controller調用不同方法之間保持上下文

[英]C# ASP.NET Core Web API: How to maintain context in the controller between calling different methods

C# ASP.NET 核心 Web API:一般新手問題。 嘗試實現基本的異步請求-回復模式。 基本思想是:

  1. 客戶端使用一些負載調用POST {url}/DataProcessor/DataX
  2. 客戶端使用GET {url}/DataProcessor/DataXStatus檢查交易狀態,直到返回 HTTP 狀態碼200
  3. 客戶端從上面的響應中獲取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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM