2016-11-01 2 views
2

경로에 어떤 문제가 있는지 잘 모르겠습니다. 경로에 액세스하려고하면 중단 점이 실행되지 않습니다. 여기 경로가 실행되지 않음 Asp.Net 코어

이 구글에서 소스 메시지 고급 나머지 클라이언트입니다

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

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

여기에 내가 GetMenuItems에 중단 점을 배치하고도 발사되지 내 컨트롤러

[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; } 
} 

입니다. 응답은 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

짐작할 수 있겠지만 생각했기 때문에 나는 걸려 넘어졌습니다. –

관련 문제