【问题标题】:ASP.NET Core custom route not working with web api 2.1ASP.NET Core 自定义路由不适用于 web api 2.1
【发布时间】:2020-07-24 00:09:14
【问题描述】:

我是 ASP.NET Core 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);
    }
}
}

现在,我正在尝试从 POSTMAN 访问 filter 路由并获得 404。其他标准路由工作正常。

POST
http://localhost:5000/api/Menus/filter

Body -> raw -> JSON

{
    "isActive": true
}

Headers -> Accept -> application/json
Headers -> Content-Type -> application/json

我在这里做错了什么?

我也看了这个链接,但还是有问题:

ASP.Net Core Web API custom route not working

【问题讨论】:

  • 您是否进行了全面重建?有时构建似乎不会刷新所有内容。
  • 是的,我做到了:(还是不行

标签: asp.net-core asp.net-core-webapi


【解决方案1】:

您也可以在您的操作中使用[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/' 部分将继承自控制器级别的 [Route("api/[controller]")] 定义

【讨论】:

    【解决方案2】:

    我在@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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 2019-01-13
      • 2014-11-12
      • 2018-08-28
      相关资源
      最近更新 更多