3

ASP.NET Core 2.0.0 웹 API를 사용하여 데이터베이스 삽입 작업을 수행 할 컨트롤러를 작성하려고합니다. 정보는 데이터베이스에 잘 삽입 될 수 있지만 CreatedAtRoute를 반환하면 'InvalidOperationException : 제공된 값과 일치하는 경로가 없습니다'라는 오류가 발생합니다. 지금까지 온라인에서 발견 한 모든 내용이 초기 시험판 버전의 ASP.NET 코어가 포함 된 버그였으며 이후 수정되었지만 실제로 어떻게해야할지 잘 모르겠다 고합니다. 다음은 내 컨트롤러 코드입니다.ASP.NET Core CreatedAtRoute 제공된 값과 일치하는 경로가 없습니다.

[Produces("application/json")] 
[Route("api/page")] 
public class PageController : Controller 
{ 
    private IPageDataAccess _pageData; // data access layer 

    public PageController(IPageDataAccess pageData) 
    { 
     _pageData = pageData; 
    } 

    [HttpGet("{id}", Name = "GetPage")] 
    public async Task<IActionResult> Get(int id) 
    { 
     var result = await _pageData.GetPage(id); // data access call 

     if (result == null) 
     { 
      return NotFound(); 
     } 

     return Ok(result); 
    } 

    [HttpPost] 
    public async Task<IActionResult> Create([FromBody] Page page) 
    { 
     if (page == null) 
     { 
      return BadRequest(); 
     } 

     await _pageData.CreatePage(page); // data access call 

     // Return HTTP 201 response and add a Location header to response 
     // TODO - fix this, currently throws exception 'InvalidOperationException: No route matches the supplied values.' 
     return CreatedAtRoute("GetPage", new { PageId = page.PageId }, page); 
    } 

누구든지이 문제를 해결할 수 있습니까?

답변

4

매개 변수는 의도 한 동작의 경로 값과 일치해야합니다. 이 경우

당신은 id하지 PageId

return CreatedAtRoute(
    routeName: "GetPage", 
    routeValues: new { id = page.PageId }, 
    value: page); 
필요