ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – ASP.NET Core 2.1 Routing – CreatedAtRoute – 没有路由匹配提供的值

2019-05-27 07:51:50  阅读:311  来源: 互联网

标签:c net asp-net-core asp-net-core-2-1


我有以下情况

   [Route("api/[controller]")]
    [ApiController]
    public class FooController: ControllerBase
    {
            [HttpGet("{id}", Name = "GetFoo")]
    public ActionResult<FooBindModel> Get([FromRoute]Guid id)
            {
              ...
            }
    }

   [Route("api/[controller]")]
    [ApiController]
    public class Foo2Controller: ControllerBase
    {

        [HttpPost("/api/Foo2/Create")]
   public ActionResult<GetFooBindModel> Create([FromBody]PostFooBindModel postBindModel)
            {
              ...

            return CreatedAtRoute("GetFoo", new { id = getBindModel.Id }, getBindModel);

            }
    }

PS:getBindModel是GetFooBindModel类型的实例.我正在接受

InvalidOperationException: No route matches the supplied values.

我也尝试更改行返回CreatedAtRoute(“GetFoo”,new {id = getBindModel.Id},getBindModel);

return CreatedAtRoute("api/Foo/GetFoo", new { id = getBindModel.Id }, getBindModel);

但仍然是同样的错误.

解决方法:

将FooController中的操作方法(Get)的名称与HttpGet Attribute上的路由名称相匹配.您可以在c#中使用nameof关键字:

[HttpGet("{id}", Name = nameof(Get))]
public ActionResult<FooBindModel> Get([FromRoute]Guid id)
{
          ...
}

而且,而不是硬编码路由名称再次使用名称:

return CreatedAtRoute(nameof(FooController.Get), new { id = getBindModel.Id }, getBindModel);

然后再试一次;

标签:c,net,asp-net-core,asp-net-core-2-1
来源: https://codeday.me/bug/20190527/1161843.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有