CreatedAtRoute()에 대해 설명할 수 있는 사람이 있습니까?
Web API 2용 템플릿에서 게시 방법은 항상 다음과 같습니다.
[ResponseType(typeof(MyDTO))]
public IHttpActionResult PostmyObject(MyDTO myObject)
{
...
return CreatedAtRoute("DefaultApi", new { id = myObject.Id }, myObject);
}
저는 이것을 이해하지 못하겠어요.CreatedAtRoute()
방법.누가 설명해 줄 수 있나요?
그CreatedAtRoute
메서드는 POST 메서드를 호출하여 새 개체를 저장할 때 새로 생성된 리소스에 URI를 반환합니다.따라서 예를 들어 주문 항목을 게시하는 경우 'api/order/11'과 같은 경로를 반환할 수 있습니다(11은 분명히 주문의 ID임).
그나저나 저는 MSDN 기사가 이것을 이해하는 데 아무 소용이 없다는 것에 동의합니다.실제로 반환되는 경로는 당연히 라우팅 설정에 따라 달라집니다.
사용할 때CreatedAtRoute
첫 번째 인수는 의 경로 이름입니다.GET
자원에.정확한 메서드 이름을 지정하더라도 HttpGet 속성의 Name 매개 변수를 사용해야 작동할 수 있습니다.
그래서 만약 당신의 귀환이POST
다음과 같습니다.
return CreatedAtRoute("Get", routeValues: new { id = model.Id }, value: model);
그러면 메서드 이름이 Get:인 경우에도 Get 메서드 속성은 다음과 같습니다.
[HttpGet("{id}", Name = "Get")]
Post 메서드에 대한 호출은 새 개체(일반적으로 JSON)를 반환할 뿐만 아니라 해당 리소스를 가져오는 URI에 대한 응답에 위치 헤더를 설정합니다.
의 필드 이름을 기록합니다.routeValues
필드 이름은 대상 경로의 바인딩 이름과 일치해야 합니다. 즉, 이름이 지정된 필드가 있어야 합니다.id
에 걸맞게{id}
에HttpGet("{id}"
마지막으로, 경우에 따라 도우미가 보다 직접적인 해결책이 될 수 있음을 언급해야 합니다.
.net core 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 메서드에 전달될 값을 포함하는 개체입니다.생성된 개체를 반환하는 데 사용됩니다.
내용 생성된 개체입니다.
위의 예는 결합된 이름을 가진 간단한 GET 방법과 새로운 객체를 생성하는 POST 방법으로 간단한 컨트롤러의 두 가지 방법을 구현하는 것을 보여줍니다.
[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 { id = company.CompanyID },
company);
}
}
중요한
CreatedAtRoute(routeName)의 첫 번째 매개 변수는 Get 메서드의 Name 정의에서 동일해야 합니다.
두 번째 매개 변수의 개체에는 Get 메서드에서 리소스를 검색하는 데 사용하는 필수 필드가 있어야 합니다. 이 필드는 자체적으로 생성된 개체의 하위 집합이라고 할 수 있습니다.
마지막 매개 변수는 본문 요청에서 전체 형식으로 수신한 회사 개체입니다.
파이널리
결과적으로 새 회사를 생성하기 위한 게시물이 이 API에 작성되면 새로 생성된 리소스를 반환하는 'api/company/{id}'과 같은 경로를 반환합니다.
언급URL : https://stackoverflow.com/questions/25045604/can-anyone-explain-createdatroute-to-me
'source' 카테고리의 다른 글
목록을 데이터 프레임으로 변환 (0) | 2023.05.17 |
---|---|
베어 저장소와 비베어 저장소의 실질적인 차이점은 무엇입니까? (0) | 2023.05.17 |
필요하지 않은 렌더 섹션이 있는지 어떻게 알 수 있습니까? (0) | 2023.05.17 |
Git에서 파일 변경 내용의 일부만 커밋 (0) | 2023.05.17 |
ng-model과 ng-bind의 차이점은 무엇입니까? (0) | 2023.05.17 |