it-swarm.dev

RoutePrefix 및 경로

RoutePrefix 자체적으로 라우팅 테이블에 경로를 추가하지 않는다는 것을 이해합니다. 작업에서 Route 속성을 선언해야합니다. 권위있는 블로그/msdn 페이지/defalut RoutePrefix 님이 라우팅 테이블에 경로를 추가하지 않는 이유를 설명하는 데 어려움을 겪고 있습니다.

누구든지 이것을 포함하는 권위있는 게시물을 가지고 있습니까? 그렇다면 누구인지 알려 드리겠습니다. 대단히 감사합니다.

편집 내 질문을 명확하게하기 위해

작동하지 않습니다

[RoutePrefix("api/Steve")]
public class SteveController : ApiController
{
    public int get(){return 1000000;}
}

공장

[RoutePrefix("api/Steve")]
public class SteveController : ApiController
{
    [Route("")]
    public int get(){return 1000000;}
}

위 시나리오는 getSteveController 작업에 빈 경로가 있다고 명시 적으로 명시했기 때문에 작동합니다. 그렇게하면 경로가 RouteTable에 추가됩니다

첫 번째 시나리오는 작동하지 않습니다. RoutePrefix 만 사용하면 라우팅 테이블에 아무것도 추가되지 않기 때문입니다. RoutePrefix 자체는 경로를 생성하지 않습니다. 이것은 일반적인 지식인 것 같습니다. 이 이유를 설명하는 출처를 알고 싶습니다. 존경받는 커뮤니티 구성원 (예 : Jon Skeet 또는 Microsoft 팀원)이 좋습니다.

21
gh9

경로 접두사는 속성 라우팅에서 의도적으로 경로와 연결됩니다.

전체 컨트롤러의 공통 접두사를 설정하는 데 사용됩니다.

기능을 소개 한 릴리스 정보를 읽으면 주제를 더 잘 이해할 수 있습니다.

ASP.NET 웹 API 2

속성 라우팅

ASP.NET Web API는 Tim McCall의 기여 덕분에 속성 라우팅을 지원합니다. 속성 라우팅을 사용하면 다음과 같이 조치 및 컨트롤러에 주석을 달아 웹 API 경로를 지정할 수 있습니다.

[RoutePrefix("orders")] 
public class OrdersController : ApiController 
{ 
    [Route("{id}")] 
    public Order Get(int id) { } 
    [Route("{id}/approve")] 
    public Order Approve(int id) { } 
} 

속성 라우팅을 통해 웹 API의 URI를보다 강력하게 제어 할 수 있습니다. 예를 들어 단일 API 컨트롤러를 사용하여 리소스 계층을 쉽게 정의 할 수 있습니다.

public class MoviesController : ApiController 
{ 
    [Route("movies")] 
    public IEnumerable<Movie> Get() { } 
    [Route("actors/{actorId}/movies")] 
    public IEnumerable<Movie> GetByActor(int actorId) { } 
    [Route("directors/{directorId}/movies")] 
    public IEnumerable<Movie> GetByDirector(int directorId) { } 
} 

ASP.NET 웹 API 2.1의 새로운 기능

ASP.NET 웹 API 2.2의 새로운 기능

주제에 관한 정말 좋은 기사

ASP.NET 5 딥 다이브 : 라우팅

주제에 대한 전문가는 없지만 이것이 어떻게 작동하는지에 대한 이해입니다.

속성 라우팅을 통해 프레임 워크는 컨트롤러의 작업에서 경로 속성을 검사하여 경로 테이블에 추가 할 경로 항목을 만듭니다. 속성 라우팅을 사용하는 한 [RouteAttribute]. 이 속성이 없으면 작업은 기본적으로 규칙 기반 라우팅으로 돌아갑니다. RoutePrefixAttribute는 경로/우편을 정의하는 방법을보다 잘 제어 할 수있는 확장 성 지점입니다. 릴리스 노트가 많이 말합니다.

내 이해와 마지막으로 제공된 링크 외에 다른 모든 것은 MS 문서에서 인용되었습니다.

19
Nkosi

신뢰할 수있는 출처를 위해 MSDN (강조 광산)의 설명이 있습니다.

RouteAttribute

컨트롤러에 배치하거나 라우트 를 통해 직접 노출 시키십시오. 컨트롤러에 배치하면 System.Web.Mvc.RouteAttribute가없는 작업에 적용됩니다.

RoutePrefixAttribute

컨트롤러 내의 모든 작업에 적용되는 경로 접두사로 컨트롤러에 주석을 답니다.

보시다시피, Route에 대한 설명은 동작을 노출시키는 것을 언급하지만 RoutePrefix는 그렇지 않습니다.

7
Robert Dennis