Asp.net core Asp.NET核心自定义路由不适用于web api 2.1
我不熟悉ASP.NET核心Web API,并尝试实现自定义路由。 这是我的控制器: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
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));
}