Web API 2 용 템플릿에서 게시 방법은 항상 다음과 같습니다.
[ResponseType(typeof(MyDTO))]
public IHttpActionResult PostmyObject(MyDTO myObject)
{
...
return CreatedAtRoute("DefaultApi", new { id = myObject.Id }, myObject);
}
이 CreatedAtRoute()
방법을 이해하지 못합니다 . 누구든지 CreatedAtRoute()
나에게 방법을 설명 할 수 있습니까 ?
답변
이 CreatedAtRoute
메소드는 일부 새 오브젝트를 저장하기 위해 POST 메소드를 호출 할 때 새로 작성된 자원에 URI를 리턴하기위한 것입니다. 예를 들어 주문 항목을 POST하면 ‘api / order / 11’과 같은 경로를 반환 할 수 있습니다 (11은 분명히 주문의 ID 임).
BTW 본인은 MSDN 기사가이를 이해하는 데 아무런 소용이 없음에 동의합니다. 실제로 돌아 오는 경로는 라우팅 설정에 따라 달라집니다.
답변
CreatedAtRoute를 사용할 때 첫 번째 인수는 리소스로 가져 오기의 메서드 이름입니다. 명확하지 않은 요령은 올바른 메소드 이름을 지정하더라도 HttpGet 속성에서 Name 매개 변수를 사용하여 작동해야한다는 것입니다.
따라서 게시물의 반품이 다음과 같은 경우 :
return CreatedAtRoute("Get", new { newModel.Id}, newModel);
그런 다음 메소드의 이름이 Get 인 경우에도 Get 메소드 속성은 다음과 같아야합니다.
[HttpGet("{id}", Name = "Get")]
Post 메서드를 호출하면 새 객체 (일반적으로 JSON)가 반환 될뿐만 아니라 해당 리소스를 가져 오는 URI에 대한 응답의 Location 헤더가 설정됩니다.
답변
.net 코어 WebAPI에서이 메소드를 사용하여 201 코드를 리턴합니다. 이는 오브젝트가 작성되었음을 의미합니다.
[Microsoft.AspNetCore.Mvc.NonAction]
public virtual Microsoft.AspNetCore.Mvc.CreatedAtRouteResult CreatedAtRoute (string routeName, object routeValues, object content);
위에서 볼 수 있듯이 CreatedAtRoute는 3 개의 매개 변수를받을 수 있습니다.
routeName
생성 후 해당 리소스를 가져 오는 URI가 될 메서드에 입력해야하는 이름입니다.
routeValues
명명 된 경로에서 GET 메소드로 전달 될 값을 포함하는 객체입니다. 생성 된 객체를 반환하는 데 사용됩니다
content
만들어진 객체입니다.
위의 예제는 결합 된 이름을 가진 간단한 GET 메소드와 새 오브젝트를 작성하는 POST 메소드를 사용하여 간단한 제어기의 두 가지 메소드 구현을 보여줍니다.
namespace BastterAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class CompanyController : Controller
{
private ICompanyRepository _companyRepository;
public CompanyController(ICompanyRepository companyRepository)
{
_companyRepository = companyRepository;
}
[HttpGet("{id}", Name="GetCompany")]
public IActionResult GetById(int id)
{
Company company = _companyRepository.Find(id);
if (company == null)
{
return NotFound();
}
return new ObjectResult(company);
}
[HttpPost]
public IActionResult Create([FromBody] Company company)
{
if (company == null)
{
return BadRequest();
}
_companyRepository.Add(company);
return CreatedAtRoute("GetCompany", new Company { CompanyID = company.CompanyID }, company);
}
}
}
중대한
-
CreatedAtRoute (routeName)의 첫 번째 매개 변수는 Get 메서드의 Name 정의에서 동일해야합니다.
-
두 번째 매개 변수의 개체에는 Get 메서드에서 리소스를 검색하는 데 사용되는 필수 필드가 있어야합니다.이 필드는 자체 생성 된 개체의 하위 집합이라고 말할 수 있습니다.
-
마지막 매개 변수는 본문 요청에서 전체 양식으로받은 회사 오브젝트입니다.
마지막으로
최종적으로 새 회사를 작성하기위한 Post가이 API에 작성되면 ‘api / company / {id}’와 같은 라우트를 리턴하여 새로 작성된 자원으로 리턴합니다.