【问题标题】:ASP.NET Core CreatedAtRoute No route matches the supplied valuesASP.NET Core CreatedAtRoute 没有路由与提供的值匹配
【发布时间】:2018-04-28 03:05:08
【问题描述】:

使用 ASP.NET Core 2.0.0 Web API,我正在尝试构建一个控制器来执行数据库插入。信息可以很好地插入数据库,但返回 CreatedAtRoute 会引发“InvalidOperationException:没有路由与提供的值匹配”。到目前为止,我在网上找到的所有内容都表明这是 ASP.NET Core 早期预发布版本的一个错误,并且已经修复,但我不确定该怎么做。以下是我的控制器代码:

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

谁能帮我解释一下?

【问题讨论】:

    标签: c# asp.net-core .net-core asp.net-core-webapi asp.net-core-mvc-2.0


    【解决方案1】:

    参数需要匹配预期操作的路由值。

    在这种情况下,您需要 id 而不是 PageId

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

    【讨论】:

      猜你喜欢
      • 2019-02-03
      • 1970-01-01
      • 2017-01-20
      • 2021-09-01
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      相关资源
      最近更新 更多