СЭД «ДЕЛО»
Руководство пользователя
×

9.2 Контроллеры

Пользователь может создавать собственные контроллеры и обращаться к методам этих контроллеров через REST API.
Приведем пример контроллера и рассмотрим его:
// Пример контроллераusing Eos.Delo.Platform.Storage.Constants;using Eos.Delo.Platform.Storage.Helpers;
using Eos.Delo.Platform.Storage.Model;
using Eos.Delo.Platform.Storage.Services.Caching;
using Eos.Delo.Samples.ControllersAndCustomQueries.Custom;
using Microsoft.AspNetCore.Mvc;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading;
using System.Threading.Tasks;
 
namespace Eos.Delo.Samples.ControllersAndCustomQueries.Areas.Sample.Controllers
{
    [Authentication]
    [Route("sample/simplesample")]
    public class SimpleSampleController : ControllerBase
    {
        private readonly UserCachingService _userService;
        private readonly CustomQueriesSample _customQueries;
 
        public SimpleSampleController(UserCachingService userService, CustomQueriesSample customQueries)
        {
            _userService = userService;
            _customQueries = customQueries;
        }
 
        [HttpGet("getdepartmentwithparent")]
        public async Task<ActionResult> GetDepartmentWithParentAsync([FromServices] IDataContext db, [FromQuery(Name = "isnnode")] long isnNode)
        {
            var cancellationToken = new CancellationToken();
 
            var user = await _userService.GetUserAsync(User, cancellationToken);
 
            var baseContext = MiddlewareHelper.CreateQueryContext(db, user, null, ExtProtOperationType.None, cancellationToken);
 
            var result = await _customQueries.GetDepartmentWithParentAsync(isnNode, baseContext);
 
                  return Ok(result);
        }
 
        [HttpPost("createtestdepartment")]
        public async Task<ActionResult> CreateTestDepartmentAsync([FromServices] IDataContext db)
        {
            var cancellationToken = new CancellationToken();
 
            var user = await _userService.GetUserAsync(User, cancellationToken);
 
            var baseContext = MiddlewareHelper.CreateMutationContext(db, user, null, ExtProtOperationType.Mutation, cancellationToken);
 
            await _customQueries.CreateTestDepartmentAsync(baseContext);
 
            return Ok();
        }
    }
}
Контроллер определяется атрибутом Route, где прописывается путь к контроллеру. Класс контроллера наследуется от ControllerBase, но также можно создавать базовые контроллеры, от которых будут наследоваться основные. Сервисы внедряются стандартно через DI в конструкторе, либо через атрибут FromServices прямо в методе. Затем можно определить методы Get и Post с помощью одноименных атрибутов. Для данных методов также можно прописать конкретный путь, например [HttpGet("some-address")]. В дальнейшем работа с методами контроллера идет стандартными средствами через HTTP.
 
Онлайн помощь создана в Dr.Explain