2016-11-15 4 views
1

MVC 애플리케이션이 있고 UI 팀에서 채용 정보 페이지의 URL을 mydomain.com/careers/{jobTitle}/{JobCode} 형식으로 요청했습니다. 이 같은 경력 컨트롤러에서이 작업을 수행 할 수 있습니다사용하지 않는 MVC 라우팅 매개 변수 처리 방법

public ActionResult Detail(string jobTitle, string jobCode) 
    { 
     var model = getModelFromDb(JobCode); 
     return View(model); 
    } 

문제는 우리가 사용되지 않는 매개 변수를 끝낼 수 있도록 우리가 작업 코드로 제목을 직업 정보를하지 찾아 볼 것입니다. 나는 이것이 최선의 방법이라고 생각하지 않는다. 특히 당신이 직업 타이틀을 원하는대로 입력 할 수 있고 직업 세부 사항을 되 찾을 수 있기 때문에 특히 그렇습니다. 이와 같은 URL은 여전히 ​​작동합니다 (mydomain.com/careers/yourmom/1234).

나는 항상 제목과 코드로 직업을 찾을 수 있다고 생각하지만 코드가 고유하기 때문에 무의미한 것처럼 보입니다.

url에 추가 매개 변수를 구현하고 잘못된 작업 제목이 URL에 삽입되는 것을 방지하는 더 좋은 방법이 있습니까?

+1

당신이 시도 할 수있는 한가지는 jobTitle을 선택 사항으로 지정하는 것입니다.하지만 URL 형식을 {JobCode}/{jobTitle}로 변경하면 옵션이 아닌 것 같습니다. – Zippy

+1

이 질문과 대답을 살펴보십시오 http://stackoverflow.com/questions/24678045/routing-optional-parameters-in-asp-net-mvc-5. – Emil

+1

라우팅에서 선택적 매개 변수를 사용할 수 있습니다. 'slug'경로 ('jobCode' 만 포함하면'jobcode'와'jobTitle' 둘 다에 url이 포함됩니다)를 원할 것 같습니까? 그렇다면 [이 답변] (http://stackoverflow.com/questions/30349412/how-to-implement-url-rewriting-similar-to-so/30363600#30363600)을 참조하십시오. –

답변

0

처럼 잘못된 경로 만 올바른 경로를 수신 거부 할 수있을 것입니다 이런 식으로

레코드의 슬러그가 전달 된 jobTitle과 일치하는지 확인합니다 (대소 문자를 구분하지 않음). 이렇게하면 가짜 URL이 작업 세부 정보 페이지를 반환하는 것을 방지하고 UI 팀을 행복하게 유지합니다.

2

your own custom route constraint을 만들면 작업 코드와 일치하는 jobtitle을 포함하는 경로 만 일치시킬 수 있습니다.

IRouteConstraint 인터페이스에서 상속 받고 Match 메서드를 구현해야합니다. 메서드가받는 매개 변수 중 하나는 RouteValueDictionary입니다.

라우팅 매개 변수를 포함하는 키/값 쌍 모음입니다. 작업 제목을 조회하고 작업 코드와 일치하는지 확인하는 데 사용할 수 있습니다.

See this example for more info. 당신이 jobCode으로 레코드를 찾고 우리는 컨트롤러 (jobTitle 및 jobCode)에 두 매개 변수를 통과하고 결국 무엇 mydomain.com/careers/yourmom/1234