2016-11-01 82 views
2

我不确定我的路线出了什么问题。当我尝试访问路由时,断点不会触发。Route not firing Asp.Net Core

这里是从谷歌源消息提前休息客户

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的工作原理!我无法弄清楚什么是错的!?

回答

2

路由的行动缺少

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; 
    } 
} 
+0

从人类的角度来看,这意味着什么?如果我在控制器上放置Route'api/[controller]',我需要为每个动作指定路由。含有'[HttpPost]'属性的'GetMenuItems'操作意味着缺少路由'(“”)'? –

+0

是的。没有路由的HttpPost适用于传统路由。您可以轻松使用'[HttpPost] [Route(“”)]',但[HttpPost]允许将路由包含在属性中。检查在答案中链接到的文档,以更好地了解在asp.net核心路由 – Nkosi

+0

我被绊倒了,因为我认为这暗示我猜。 –