여기 수에 대한 제약과 함께, 당신과 같은 경로의 예 :
routes.MapRoute(
"Question",
"questions/{questionID}",
new { controller = "StackOverflow", action = "Question" },
new { questionID = @"\d+" } //Regex constraint specifying that it must be a number.
);
는 여기에서 우리는 questionID 적어도 하나 개의 번호로 설정. 이것은 또한 정수 이외의 어떤 것도 포함하고있는 모든 URL을 차단할 것이고 nullable int가 필요하지 않게 할 수도 있습니다.
참고 : 여기에는 Int32 (-2147483647 - +2147483647) 범위보다 큰 숫자는 고려되지 않습니다. 나는 이것을 해결할 사용자에게 연습 문제로 남겨 둡니다. :)
사용자가 "questions/foo"라는 URL을 입력하면 매개 변수 제약 조건을 충족시키지 못하기 때문에 Question 동작을 수행하지 않고 넘어갑니다. 당신은 더 아래로 캐치 올/기본 경로에서 원하는 경우를 처리 할 수
routes.MapRoute(
"Catchall",
"{*catchall}", // This is a wildcard routes
new { controller = "Home", action = "Lost" }
);
이 홈 컨트롤러에서 잃어버린 조치로 사용자를 보낼 것입니다. 와일드 카드에 대한 자세한 내용은 here을 참조하십시오.
NB : Catchall은 마지막 경로로 있어야합니다. 체인을 위로 올려 놓으면 ASP.NET MVC에서 느린 경로의 라우팅을 고려할 때 체인 아래에 다른 모든 핸들을 처리한다는 의미입니다.
이것은 미친 사용자를 처리하는 꽤 좋은 방법처럼 보입니다.) – JOBG
Scott Hanselman은 마지막 줄 대신 'new {questionID = @ "\ d {1,}"}' questionID = @ "\ d +"} '같은 것을 의미합니다. 출처 : http://www.asp.net/learn/mvc-videos/video-7093.aspx – Andrew
네, 둘은 거의 똑같습니다. 데이터베이스에서 내 경로를 동적으로 생성하기 때문에 중괄호로 중괄호를 쓰는 경향이 있습니다. 최대 자릿수를 명시 적으로 지정하려면 논리가 약간 저장됩니다. –