#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. Находятся ли задачи в приложении или они выгружены извне? Если они являются внешними, вы не должны сохранять какое-либо состояние в своем приложении, если вы также не можете восстановить это состояние из внешнего ресурса, так как оно может быть потеряно в любое время.