Сохранение состояния внутри класса контроллера

#c# #rest #asp.net-web-api

Вопрос:

Я разрабатываю службу веб-API на C# с консолью, используя пакет Nuget Microsoft.AspNetCore.

Я не знаю, возможно ли сохранить состояние внутри Controller класса или мне нужно, как кто-то предложил в комментариях, ввести другой класс, который будет управлять этим состоянием. Ниже приведен только пример, поскольку вопрос заключается в том, как управлять состоянием клиента (назначил ли этот клиент задачу или нет, или завершил ли он свою предыдущую задачу), когда они запрашивают другую задачу.

Эта веб-служба будет иметь метод, с помощью которого клиенты могут запрашивать задачу. Код для этого метода выглядит примерно так:

 using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleWebDriver.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class TaskController : ControllerBase
    {
        [HttpGet]
        public IActionResult Get(string workerName)
        {
            if ((workerName == null) || (workerName.Equals(string.Empty)))
                return Ok("Empty");
            else
                return Ok(workerName);
        }
    }
}
 

Внутри Get метода мне нужно будет проверить workerName , назначила ли она задачу, и, если нет, назначьте ее хранителю. Моя проблема заключается в том, что я не знаю, что мне нужно делать, чтобы сохранить структуру в памяти, пока работает служба.

Я не знаю, нужно ли мне объявлять, например, словарь внутри контроллера или внутри startup класса:

 using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;

namespace ConsoleWebDriver
{
    internal class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
        }

        public void Configure(IApplicationBuilder app)
        {
            app.UseRouting();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}
 

Я думаю, что эта структура должна быть параллельной.

Что мне нужно сделать, чтобы сохранить эту информацию в памяти во время работы службы?

Комментарии:

1. Пожалуйста, будьте осторожны при выборе тегов, не пишите просто одну букву и не нажимайте Enter . Которые обычно выбирают неправильный тег. Например, тег языка C вместо C#.

2. Возможно, вы захотите создать службу для управления задачами, а затем внедрить ее в контроллер.

3. @BradyDean ХОРОШО. Я собираюсь найти, что такое «служба для управления задачами», а затем как «внедрить ее в контроллер».

4. Может ли кто-нибудь позвонить в конечную точку? Может ли пользователь извлекать только СВОИ задачи или существует только один список задач? Если есть только один список задач, комментарий Брэди Дина-это то, что вам нужно: services.AddSingleton<ITaskStateService, TaskStateService>(); . Остерегайтесь, что asp.net основное приложение может перейти в спящий режим через 5 минут, и состояние будет потеряно

5. Находятся ли задачи в приложении или они выгружены извне? Если они являются внешними, вы не должны сохранять какое-либо состояние в своем приложении, если вы также не можете восстановить это состояние из внешнего ресурса, так как оно может быть потеряно в любое время.