Asp.net core Asp.NET核心自定义路由不适用于web api 2.1

Asp.net core Asp.NET核心自定义路由不适用于web api 2.1,asp.net-core,asp.net-core-webapi-2.1,Asp.net Core,Asp.net Core Webapi 2.1,我不熟悉ASP.NET核心Web API,并尝试实现自定义路由。 这是我的控制器: using ... namespace FoodDeliveryServer.Controllers { [Route("api/[controller]")] [ApiController] public class MenusController : ControllerBase { private readonly FoodDeliveryContext _context; public

我不熟悉ASP.NET核心Web API,并尝试实现自定义路由。 这是我的控制器:

using ...

namespace FoodDeliveryServer.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class MenusController : ControllerBase
{
    private readonly FoodDeliveryContext _context;

    public MenusController(FoodDeliveryContext context)
    {
        _context = context;
    }

    // GET: api/Menus
    [HttpGet]
    public IEnumerable<Menu> GetMenu_1()
    {
        return _context.Menu;
    }

    // rest of the methods

    // POST: api/Menus
    [HttpPost]
    public async Task<IActionResult> PostMenu([FromBody] Menu menu)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        _context.Menu.Add(menu);
        await _context.SaveChangesAsync();

        return CreatedAtAction("GetMenu", new { id = menu.Id }, menu);
    }

    // POST: api/Menus/filter
    [HttpPost("filter", Name = "Filtermenu")]
    public async Task<IActionResult> FilterMenu([FromBody] bool isActive)
    {
        return Ok(_context.Menu.Where(m => m.IsActive == isActive));
    }

    private bool MenuExists(long id)
    {
        return _context.Menu.Any(e => e.Id == id);
    }
}
}
我做错了什么

我也查看了此链接,但仍然存在问题:

您也可以在操作中使用[Route]装饰器。否则,它将根据您在StartUp.Configure中定义的内容创建路由

// POST: api/Menus/filter
[Route("filter")]
[HttpPost("filter", Name = "Filtermenu")]
public async Task<IActionResult> FilterMenu([FromBody] bool isActive)
{
    return Ok(_context.Menu.Where(m => m.IsActive == isActive));
}
应该对你有用。
“/api/Menus/”部分将从控制器级别的[Routeapi/[controller]]定义继承而来

我在@Marius的帮助下解决了这个问题。以下是我所做的:

    // POST: api/Menus/filter
    [HttpPost]
    [Route("filter", Name = "Filtermenu")]
    public async Task<IActionResult> FilterMenu([FromBody] Menu menu)
    {
        return Ok(_context.Menu.Where(m => m.IsActive == menu.IsActive));
    }

看起来,我们需要提供一个类来读取FromBody

您是否完成了完整的重建?有时构建似乎并没有刷新所有内容。是的,我刷新了:仍然不工作
    // POST: api/Menus/filter
    [HttpPost]
    [Route("filter", Name = "Filtermenu")]
    public async Task<IActionResult> FilterMenu([FromBody] Menu menu)
    {
        return Ok(_context.Menu.Where(m => m.IsActive == menu.IsActive));
    }