【发布时间】:2018-11-09 07:48:34
【问题描述】:
随着asp.net core 2.1中Apicontroller属性的引入,我想知道如何让api和普通方法在同一个控制器中工作。
[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 '没有属性路由。动作方法 使用 ApiControllerAttribute 注释的控制器必须是属性 路由。
如果我在控制器级别删除 [ApiController] 和 [Route("api/[controller]")] 而是放在方法级别,那么它肯定可以工作。仍然不知道这些方法是否有更好的混合解决方案,因为我想使用这个新的 ApiController 功能。
[Route("/api/controller/saveorder")]
public async Task<IActionResult> SaveOrder(SaveOrderModel model)
非常感谢任何输入。
【问题讨论】:
-
提示:
CustomerOrders是一个HttpGet方法,你如何发送这两种方法的请求以及为什么 GET 请求不起作用? -
你说的无法运行是什么意思?不打?返回
null?你期望得到什么? -
@ibubi 抱歉,我更新了我的帖子。
-
@TetsuyaYamamoto customerorder 不是httpget,它是返回视图的正常操作方法
-
您不能在标有
ApiControllerAttribute的控制器内使用return View()。您只能使用BadRequestResult、NotFoundResult或OkObjectResult。如果你在没有提供属性路由的情况下放置[HttpGet]属性会发生什么?
标签: c# asp.net-core