웹 API 라우팅 ASP.NET 간단히 말해, 클라이언트 요청을 대응하는 액션에 매핑하는 과정입니다. "ASP.NET Web API Practice Series 03, Routing Templates, Routing Conventions, Routing Settings"라는 글에서 템플릿, 관습, HTTP 메서드를 통해 경로를 설정하는 경험을 했는데, 이 방법의 장점은 라우팅 템플릿이 App_Start 폴더 아래 WebApiConfig 클래스에 균일하게 배치되어 관리가 편리하다는 점이지만, 단점은 유연성이 부족하다는 점입니다.
REST는 모든 것을 리소스로 취급하며, 때로는 Customer나 Orders와 같은 자식 리소스가 있는 리소스가 customers/1/orders와 같은 요청을 입력하고 싶어 할 수 있지만, 관습만으로는 이 경로를 달성하기 어렵습니다. 실제로 ASP.NET 웹 API는 Action과 직접 연결할 수 있는 Route 기능을 제공하는데, 이는 매우 유연하고 직관적으로 사용할 수 있습니다.
MVC4에서 Route 기능을 어떻게 사용하는지 체험해 보 ASP.NET.
Route 속성을 허용하세요
먼저 WebApiConfig에서 설정해야 합니다.
위의 MapHttpAttributeRoutes 메서드는 최신 버전의 웹 API에서만 ASP.NET 사용할 수 있습니다버전 용량이 비교적 낮다면, 이전 버전을 제거하고 NuGet 패키지 매니저 콘솔을 통해 최신 버전을 설치할 수 있습니다.
다음으로 Global.asax에서 WebApiConfig를 등록하는 원래 방식을 주석으로 표시하고 다음과 같이 새로운 방법을 채택해야 합니다:
이 시점에서 프로젝트를 실행하면 다음과 같은 오류가 발생할 수 있습니다:
이는 ASP.NET 웹 API 최신 버전을 다운로드할 때 동시에 icrosoft 최신 버전을 다운로드했기 때문입니다. AspNet.WebApi.HelpPage. 최신 버전의 도움말 페이지를 삭제하고 이전 버전을 다운로드할 수 있습니다.
Uninstall-package Microsoft.AspNet.WebApi.HelpPage –Force Install-Package Microsoft.AspNet.webApi.HelpPage -pre
Route 속성을 사용하세요
커소머 클래스를 만드세요.
Order 클래스를 만드세요.
Order 컬렉션을 얻기 위해 데이터베이스 클래스를 생성하세요.
다음과 같이 작성된 빈 API 컨트롤러를 만드세요:
브라우저에서 다음 내용을 입력하세요:
개발 ASP.NET MVC4를 사용하는 경우, 프로그램을 처음 실행할 때 다음과 같은 오류가 발생할 수 있습니다:
[답변] System.Web.WebPages.Razor.Configuration.HostSection은 [B]System.Web.WebPages.Razor.Configuration.HostSection으로 캐스트할 수 없습니다. 타입 A는 "System.Web.WebPages.Razor, version=2.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (C:/Windows/Microsoft.Net/assembly/GAC_MSIL/ 문맥 내 "Default"에서 파생됨)에서 파생되었습니다. System.Web.WebPages.Razor/v4.0_2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll"). 유형 B는 "System.Web.WebPages.Razor, version=3.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (문맥상 "C:/Windows/Microsoft.NET/Framework/v4.0.30319/ in "Default")에서 파생되었습니다 Temporary ASP.NET Files/vs/feb7ce97/a525d58a/asse
이는 ASP.NET 웹 API의 최신 버전을 다운로드할 때 최신 버전의 Razor를 사용하기 때문입니다. Web.config의 루트 디렉터리에서 다음과 같은 구성을 설정해야 합니다:
RoutePrefix 기능을 사용하세요
API 컨트롤러에서 모든 액션을 접두사로 지정하고 싶다면, API 컨트롤러에 RoutePrefix 기능을 적용할 수 있습니다.
예를 들어, 우리는 다음과 같은 형식으로 만들고 싶습니다: http://localhost/api/customers/1/orders
OrdersController를 이렇게 수정하세요.
또한 Route 기능에서 ~를 사용해 액션의 접두사 규칙을 덮어쓸 수도 있습니다.
RoutePrefix 기능에서 정의된 접두사는 매개변수 변수도 가질 수 있습니다:
라우팅 제약 조건
경로 내 매개변수 변수는 "{매개변수 변수 이름: constraint}"로 제한할 수 있습니다.
위에서 말씀드리면, 조각 변수 id가 int 타입이면 첫 번째 액션으로 라우팅되고, 그렇지 않으면 두 번째 액션으로 라우팅됩니다.
ASP.NET 웹 API 내장 제약 조건은 다음과 같습니다:
{x:alpha}는 대문자와 소문자를 제한합니다 {x:bool} {x:날짜 시간} {x:십진수} {x:더블} {x:float} {x:guid} {x:int} {x:length(6)} {x:length(1,20)}는 길이 범위를 제한합니다 {x:long} {x:maxlength(10)} {x:min(10)} {x:range(10,50)} {x:regex(regex)}
매개변수 변수에 대해 동시에 여러 제약을 설정할 수 있습니다:
IHttpRouteConstraint 인터페이스를 구현하여 제약 규칙을 맞춤화하세요. 0이 될 수 없는 제약 조건을 구현하세요.
App_Start 폴더의 WebApiConfig에 커스텀 제약 조건을 등록하세요.
커스텀 제약 조건을 사용하세요.
선택 매개변수와 기본 값
라우팅 매개변수 변수가 선택 사항인 경우, 해당 매개변수도 기본 값으로 지정되어야 합니다.
제약 조건 뒤에 ? 추가하여 선택적 선택을 나타내고, 메서드 매개변수에서 id의 기본값을 설정하세요.
노선 이름을 정하세요
라우팅 우선순위
Route 속성이 설정하는 경로 우선순위는 관례와 RouteOrder 속성을 기반으로 결정됩니다.
협약은 다음과 같습니다:
1. 정적 조각 변수 2. 제약 조건이 있는 프래그먼트 변수 3. 제약 조건 없는 프래그먼트 변수 4. 제약 조건이 있는 와일드카드 조각 변수 5. 제약 없는 와일드카드 조각 변수
RouteOrder 속성의 기본 값은 0이며, 속성 값이 작을수록 더 높습니다.
위의 라우팅 우선순위는 다음과 같습니다:
orders/details static fragment 변수, RouteOrder 속성의 값은 0입니다 RouteOrder 속성에서 0인 제약 조각 변수를 가진 orders/{id} orders/{customerName}은 제약 조건이 없는 프래그먼트 변수이며, RouteOrder 속성의 값은 0입니다 orders/{*date}는 RouteOrder 속성에서 값이 0인 와일드카드 조각 변수입니다 주문/대기 중인 RouteOrder 속성 값이 1일
|