.NET Core API - zwracanie danych z żądania POST

0

Posiadam poniższy kontroler:

    [Route("api/[controller]")]
    public class RecipesController : ControllerBase
    {
        private readonly IRecipeQuery _recipeQuery;
        private readonly IRecipeService _recipeService;

        public RecipesController(IRecipeQuery recipeQuery, IRecipeService recipeService)
        {
            _recipeQuery = recipeQuery;
            _recipeService = recipeService;
        }

        [HttpGet]
        public async Task<IActionResult> GetAll()
        {
            return Ok(await _recipeQuery.GetAllAsync());
        }

        [HttpGet("{id}")]
        public async Task<IActionResult> Get(Guid id)
        {
            return Ok(await _recipeQuery.GetAsync(id));
        }

        [HttpPost]
        public async Task<IActionResult> Add([FromBody] RecipeModel model)
        {
            await _recipeService.AddAsync(model);

            return CreatedAtAction("Get", new {id = model.Id}, model);
        }
    }

W endpoincie POST zwracam status 201 Created z lokacją do nowo utworzonego obiektu. Czy sposób wykonania tego jest prawidłowy? Ponadto myślałem w jaki sposób najlepiej jest przekazywać te nowo utworzone ID z bazy danych (EF generuje klucz). Zrobiłem to w serwisie RecipeService następująco:

    public class RecipeService : IRecipeService
    {
        private readonly ShoppingListDbContext _shoppingListDbContext;
        private readonly IMapper _mapper;

        public RecipeService(ShoppingListDbContext shoppingListDbContext, IMapper mapper)
        {
            _shoppingListDbContext = shoppingListDbContext;
            _mapper = mapper;
        }

        public async Task AddAsync(RecipeModel model)
        {
            var recipe = _mapper.Map<Recipe>(model);

            _shoppingListDbContext.Recipes.Add(recipe);
            await _shoppingListDbContext.SaveChangesAsync();

            model.Id = recipe.Id;
        }
    }

Czy przepisanie ID można zrobić jakoś ładniej, niż na sztywno przepisywać do modelu wartość z encji po jej zapisie i utworzeniu nowego ID?

0

Też jestem ciekaw odpowiedzi na te pytania więc jeśli ktoś by mógł odpowiedzieć co o tym sądzi... :)

2

Czy przepisanie ID można zrobić jakoś ładniej, niż na sztywno przepisywać do modelu wartość z encji po jej zapisie i utworzeniu nowego ID?

Niech ta metoda (AddAsync) po prostu zwróci nowy idk, modyfikowanie obiektu przesłanego jako parametr nie jest najlepszym pomysłem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1