【问题标题】:Route not firing Asp.Net Core路由未触发 Asp.Net Core
【发布时间】:2017-03-15 02:59:37
【问题描述】:

我不确定我的路线有什么问题。当我尝试访问路由时,断点没有触发。

这是来自 google 高级休息客户端的源消息

POST /api/menu HTTP/1.1
HOST: localhost:6223
content-type: application/json
content-length: 34

{ "app_id": 99999, "user_type": 2}

这是我的控制器

[Route("api/[controller]")]
public class MenuController : Controller
{
    private MenuRepo xMenuRepo;
    public MenuController(IOptions<SqlConnectionStringsList> iopt)
    {
        xMenuRepo = new MenuRepo(iopt);
    }

    [HttpPost]
    public IEnumerable<Menu> GetMenuItems([FromBody] MenuQuery menuq)
    {
        List<Menu> xMenuList = new List<Menu>();
        xMenuList = xMenuRepo.GetMenuItems(menuq.app_id, menuq.user_type);
        return xMenuList;
    }
}

public class MenuQuery
{
    public int app_id { get; set; }
    public int user_type { get; set; }
}

我在GetMenuItems 上放置了一个断点,它甚至没有触发。响应是 500 内部服务器错误。这个项目只有两个路由,一个新项目的默认 ValuesController 和这个 MenuController。除了控制器顶部之外,我找不到任何其他位置来指定项目中的路由。但是 ValuesController 有效!我不知道怎么了!?

【问题讨论】:

    标签: c# asp.net asp.net-web-api routes asp.net-core


    【解决方案1】:

    行动路线缺失

    Routing to Controller Actions: Attribute Routing

    Mixed Routing

    MVC 应用程序可以混合使用常规路由和属性 路由。控制器通常使用常规路由 为浏览器提供 HTML 页面,为控制器提供属性路由 提供 REST API。

    动作要么是传统路由,要么是属性路由。配售 控制器上的路由或操作使其属性路由。 定义属性路由的操作无法通过 常规路线,反之亦然。上的任何路由属性 控制器使控制器属性中的所有动作都被路由。

    [Route("api/[controller]")]
    public class MenuController : Controller
    {
        private MenuRepo xMenuRepo;
        public MenuController(IOptions<SqlConnectionStringsList> iopt)
        {
            xMenuRepo = new MenuRepo(iopt);
        }
    
        //POST api/menu
        [HttpPost("")]
        public IEnumerable<Menu> GetMenuItems([FromBody] MenuQuery menuq)
        {
            List<Menu> xMenuList = new List<Menu>();
            xMenuList = xMenuRepo.GetMenuItems(menuq.app_id, menuq.user_type);
            return xMenuList;
        }
    }
    

    【讨论】:

    • 用人类的话说这意味着什么?如果我在控制器上放置一个路由api/[controller],我将需要为每个操作指定路由。动作含义 GetMenuItems 和属性含义 [HttpPost] 缺少路由 ("")?
    • 是的。没有路由的 HttpPost 适用于常规路由。您可以轻松地使用[HttpPost][Route("")],但 [HttpPost] 允许将路由包含在属性中。查看答案中链接到的文档,以更好地了解 asp.net core 中的路由
    • 我被绊倒了,因为我认为这是隐含的。
    • 我不得不删除答案检查,这不起作用。相同的结果 500 内部服务器错误和方法上的断点未命中。
    • 然后尝试为请求调试管道。那么问题可能与路由无关,但与您的代码中的错误有关。从控制器开始向后工作以缩小导致错误的原因。在构造函数中放置一个断点并确保正确创建了控制器。从那里检查启动配置。如果您能获得与 500 相关的错误消息,这将有所帮助
    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多