Aspnetcore: ๋‹จ์ผ ๊ฐœ์ฒด์—์„œ ์—ฌ๋Ÿฌ [FromRoute], [FromHeader], [FromBody] ๋“ฑ ์ง€์›

์— ๋งŒ๋“  2018๋…„ 01์›” 23์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: dotnet/aspnetcore

์š”์ฒญ ๋ฐ”์šด๋“œ์˜ ๋ชจ๋“  ๊ด€๋ จ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ํ–‰๋™์„ ์ƒ์ƒํ•ด๋ด

[HttpPost({id})]
public virtual async Task<IActionResult> Post(PostRequest model)

๊ทธ๋ฆฌ๊ณ  ๋ชจ๋ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

public class PostRequest
{
    [FromRoute]
    public int Id { get; set; }

    [FromHeader]
    public string SomeHeader { get; set; }

    [FromBody]
    public int Foo { get; set; }
    [FromBody]
    public string Bar { get; set; }
    [FromBody]
    public string Baz { get; set; }
}

๋ถˆํ–‰ํžˆ๋„ ์—ฌ๋Ÿฌ [FromBody] ๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ—ˆ์šฉ๋˜๊ณ  ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ–ˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ๋ฐ˜ CRUD ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[HttpPost({id})]
public virtual async Task<IActionResult> Post(PostRequest model)
{
    var command = _mapper.Map<TCommand>(model); // AutoMapper
    await _mediator.Send(command); // MediatR
    // omitted for brevity
    return Created();
}

๋ถ„๋ช…ํžˆ ๊ทธ๋ ‡๊ฒŒ ๋ณด์ด์ง€๋Š” ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์•„์ด๋””์–ด๋Š” API/MVC์™€ ๊ด€๋ จ๋˜์ง€ ์•Š์€ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ชจ๋“  ๋กœ์ง์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ•˜๋Š” ์ผ์€

  • ๋ชจ๋ธ ๊ฒ€์ฆ
  • ์š”์ฒญ์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ถ”์ถœ
  • ์˜ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ธ๋“ค๋Ÿฌ์— ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ์ ์ ˆํ•œ http ์‘๋‹ต์„ ๋ฐ˜ํ™˜

์ด์ œ ๋ชจ๋“  CRUD ์ปจํŠธ๋กค๋Ÿฌ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ๊ตฌํ˜„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งค์šฐ ๊ธฐ๋ปค์Šต๋‹ˆ๋‹ค!

[FromBody] ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์†์„ฑ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [FromBodyPart] , [BindFromBody] ๋˜๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒŒ ๊ฐ€๋Šฅํ• ๊นŒ์š”?

area-mvc

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ธฐ๋Šฅ ์š”์ฒญ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค ๊ณ„ํš ๊ธฐ๊ฐ„ ๋™์•ˆ ์ด ๊ธฐ๋Šฅ์„ ๊ณ ๋ คํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ์ด ๋ฌธ์ œ์˜ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

๊ธฐ๋Šฅ ์š”์ฒญ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค ๊ณ„ํš ๊ธฐ๊ฐ„ ๋™์•ˆ ์ด ๊ธฐ๋Šฅ์„ ๊ณ ๋ คํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ์ด ๋ฌธ์ œ์˜ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์—ฌ์ „ํžˆ ์—ฌ๊ธฐ์—์„œ ๋Œ€๋‹ตํ•˜์ง€ ๋ชปํ•œ ๋‚˜์˜ SO ์งˆ๋ฌธ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
https://stackoverflow.com/questions/44261111/how-to-model-bind-path-segment-to-object-property

์—ฐ๋ฝ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์ด ์งˆ๋ฌธ์„ ์žฌํ‰๊ฐ€ํ•œ ํ›„ ์šฐ๋ฆฌ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋”ฐ๋ฅด๋ ค๋Š” ์›์น™๊ณผ ์ž˜ ๋งž์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰