С появлением атрибута Apicontroller
в ядре asp.net 2.1 мне интересно, как заставить методы api и normal работать в одном контроллере.
[Route("api/[controller]")]
[ApiController]
public class OrderController : ControllerBase
{
[HttpPost]
public async Task<IActionResult> SaveOrder(SaveOrderModel model)
{
//...
}
public async Task<IActionResult> CustomerOrders()
{
if (!User.IsInRole("Customer"))
return Challenge();
var customer = await _workContext.CurrentCustomer();
var model = await orderModelFactory.PrepareCustomerOrderListModel();
return View(model);
}
}
Я могу вызвать метод post /api/order/saveorder
, но не могу запустить https://example.com/order/customerorders
.
Показывает исключения: InvalidOperationException: Action
«.CustomerOrders» не имеет атрибута route. Методы действий по
контроллеры, аннотированные ApiControllerAttribute, должны быть атрибутом
маршрутизация.
Если я удаляю [ApiController] и [Route ("api / [controller]")] на уровне контроллера и вместо этого ставлю на уровень метода, то это, безусловно, работает. до сих пор не знаю, есть ли лучшее гибридное решение для этих методов, так как я хочу использовать эту новую функцию ApiController.
[Route("/api/controller/saveorder")]
public async Task<IActionResult> SaveOrder(SaveOrderModel model)
Любой вклад приветствуется.