asp.net core action冲突小记

一个asp.net core controller这样写:

[ApiController]
[Route("api/[controller]/[action]")]
public class OrderController : ControllerBase
{
    [HttpPost("create")]
    public IActionResult CreateOrder()
    {
        mediator.Publish(new UserInfo("","fffff"));
        _orderService.CreateOrder("fff");
        return Ok("Order created and event published.");
    }
}

这样写,发现通过URL:http://localhost:5008/api/order/Create报:404,感觉奇怪,后来问了Deepseek才知道是

  1. 控制器级别路由: [Route("api/[controller]/[action]")] 要求所有动作都使用 action 名称。

  1. HttpPost 路由: [HttpPost("create1")] 试图设置自定义路由,但与控制器级别路由冲突

解决方法也简单:要么去掉控制器级别的action,改由action自己控制;要么用路由器级别的action。感觉两者冲突时选择框架选择一个即可,现状是两者冲突时都不可用,奇怪的表现!~

posted @ 2025-10-27 09:20  Shapley  阅读(0)  评论(0)    收藏  举报