라우팅 제약 조건
코어 ASP.NET 라우팅 템플릿을 정의하여 URL에 변수를 전달할 수 있고, 변수에 대한 기본값, 선택사항, 제약 조건을 제공할 수 있습니다.
이 제약 조건은 지정된 제약 조건 이름을 속성 경로에 추가하여 사용되며, 다음과 같이 사용됩니다:
프레임워크 내에 이미 제공된 몇 가지 제약 조건은 다음과 같습니다:
제약 조건 | 본보기 | 경기 예시 | 설명 | 지능 | {id:int} | 123456789, -123456789 | 임의의 정수 일치 | 불 | {active:bool} | 참, 거짓 | 참 또는 거짓 일치 (대문자 구분) | 데이트 타임 | {dob:datetime} | 2016-12-31, 2016-12-31 오후 7:32 | 유효한 DateTime 값과 일치함 (고정 지역성 기준 - 경고 참조) | 십진법 | {가격:십진수} | 49.99, -1,000.01 | 유효한 소수점 값과 일치함 (고정 지역성 - 경고 참조) | 더블 | {무게:두 배} | 1.234, -1,001.01e8 | 유효한 이중 값과 일치함 (고정 지역성 기준 - 경고 참조) | 플로트 | {무게:float} | 1.234, -1,001.01e8 | 유효한 float 값과 일치함 (고정 지역성 - 경고 참조) | 가이드 | {id:guid} | CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638} | 유효한 GUID 값과 일치함 | 길게 | {틱:롱} | 123456789, -123456789 | 유효한 롱 값과 일치합니다 | minlength(값) | {사용자명:minlength(4)} | 릭 | 문자열은 최소 4자 이상이어야 합니다 | Maxlength(값) | {파일명:maxlength(8)} | 리처드 | 문자열은 8자를 초과해서는 안 됩니다 | 길이(길이) | {filename:length(12)} | somefile.txt | 문자열은 정확히 12자여야 합니다 | 길이(최소, 최대) | {filename:length(8,16)} | somefile.txt | 문자열은 최소 8자, 최대 16자여야 합니다 | min(값) | {나이:min(18)} | 19 | 정수 값은 최소 18이어야 합니다 | max(value) | {나이:맥스(120)} | 91 | 정수 값은 120을 초과해서는 안 됩니다 | 범위(최소, 최대) | {연령:범위(18,120)} | 91 | 정수 값은 최소 18이어야 하며 120을 넘지 않아야 합니다 | 알파 | {name:alpha} | 릭 | 문자열은 하나 이상의 알파벳 문자(a-z, 대문자 구분)로 구성되어야 합니다. | regex(표현식) | {ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)} | 123-45-6789 | 문자열은 정규 표현식과 일치해야 합니다(정규 표현식 정의에 관한 팁 참조) | 필수 | {name:required} | 릭 | URL 생성 시 비파라미터 값의 존재를 강제하는 데 사용됩니다 |
내장된 제약 조건은 대부분의 일반적인 사용 사례에 효과적이지만, 때로는 원하는 효과를 맞춤화해야 할 때도 있습니다.
맞춤형 라우팅 제약
사용자 지정 제약은 IRouteConstraint 인터페이스를 구현한 후 네 개의 매개변수가 있는 Match 메서드를 과부하하는 것입니다.
첫 번째 매개변수인 httpContext는 현재 요청의 컨텍스트입니다
두 번째 매개변수인 경로는 현재 제약 조건이 속하는 경로입니다
세 번째 매개변수인 routeKey는 현재 검사 중인 변수의 이름으로, 예를 들어 문서 시작 부분의 예시에서 id가 있습니다 네 번째 매개변수 값은 현재 URL이 일치하는 사전 값으로, 예를 들어 문서 시작 부분의 예시 경로와 같습니다. URL이 users/1이라면 키 = id , value = 1인 사전이 존재합니다. 물론 컨트롤러, 액션 등 다른 변수들에 대한 값도 있습니다.
다섯 번째 매개변수인 routeDirection은 URL이 웹에서 요청되었는지 아니면 Url.Action과 같은 메서드에 의해 생성되는지 나타내는 열거된 값입니다.
예를 들어, 경로가 전달하는 매개변수가 지정된 열거 값이어야 한다는 제약 조건을 정의하고자 합니다.
먼저 열거기를 정의해 봅시다:
그 다음 제약 조건을 정의합니다:
Startup.cs에서 ConfigureServices 메서드에 사용자 지정 제약 조건을 추가하세요:
경로에 대한 제약 조건을 사용하기:
(WebApplicationTest가 현재 네임스페이스입니다)
{id:int:min(2)} 경로는 min(2)를 사용해야 하며, 그렇지 않으면 id = 0 또는 id = 1에 대해 충돌이 발생합니다.
프로그램을 실행하고 경로가 api/test/0, api/test/1, api/test/true, api/test/false일 때 맞춤 제약 조건을 맞추세요.
경로가 api/test/{정수 2보다 큰} 경우, 두 번째 경로와 일치합니다.
다른 경우들은 세 번째 경로와 일치합니다.
결론
라우팅 제약은 일부 상황에서 매우 유용한 기능으로, 컨트롤러의 검사 매개변수를 줄일 수 있고, 부분 매개변수 검증 기능은 선언적 조정을 통해 구현할 수 있고, 일부 중복 검사는 공개 사용을 위해 제약으로 추출할 수 있습니다.
제약 조건의 생성자는 주입할 수 있어 매우 확장성이 높으며, 일부 매개변수 검증은 데이터베이스를 쿼리하여 수행할 수 있습니다.
공식 웹사이트에서는 라우팅 제약에 대해 간략히 언급할 뿐이며, 이 글에서는 라우팅 제약 조건의 구체적인 예시를 제공합니다.
|