web-dev-qa-db-fra.com

ASP.NET Core CreatedAtRoute Aucun itinéraire ne correspond aux valeurs fournies

À l'aide de l'API Web ASP.NET Core 2.0.0, j'essaie de créer un contrôleur pour effectuer une insertion de base de données. Les informations peuvent être insérées dans la base de données très bien, mais le retour d'un CreatedAtRoute lève une 'InvalidOperationException: aucun itinéraire ne correspond aux valeurs fournies.' Tout ce que j'ai trouvé en ligne jusqu'à présent indique que c'était un bogue avec les premières versions préliminaires d'ASP.NET Core et a depuis été corrigé, mais je ne sais pas vraiment quoi faire à ce sujet. Ce qui suit est mon code de contrôleur:

[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);
    }

Quelqu'un pourrait-il me faire la lumière à ce sujet?

11
Mike

Les paramètres doivent correspondre aux valeurs de l'itinéraire de l'action envisagée.

Dans ce cas, vous avez besoin de id pas PageId

return CreatedAtRoute(
    actionName: "GetPage", 
    routeValues: new { id = page.PageId },
    value: page);
16
Nkosi