1

ASP.NET MVC 라우팅 : 쿼리 작업을 한 번의 작업으로, 다른 작업없이

다음 경로가 필요합니다.

example.com/products
제품 범주 페이지 (예 : 자동차, 트럭, 버스, 자전거)
컨트롤러 = Products, 동작 = Categories()

example.com/products?a=1&b=2
인덱스로 이동합니다. 특정 카테고리 (예 : Ford, Honda, Chevy)의 모든 제품보기
controller = Products, action = Index(string a, string b)

경로는 쿼리 문자열에서만 다르며 MVC는 "?"다음에 나오는 모든 내용을 무시합니다. 따라서 물론 첫 번째 규칙 하나만 적용됩니다.

어떻게 구별합니까?

편집 : 다르게 명시된, 나는 두 경로 싶어요. 경로에서 쿼리 문자열을 사용할 수 있습니까? 아니면 MVC가이를 무시합니까? 그것을 해킹하거나 사용자 지정 바인딩과 사용자 지정 유효성 검사를 할 수있는 것과 같은 일종의 사용자 지정 라우팅 체계를 사용하는 방법이 있습니까?

+0

& b가 설정된 경우 올바른보기를 반환하거나 그렇지 않은 경우 색인을 반환 할 수 있습니다. URL을 다음과 같이 구분하지 않는 이유는 무엇입니까? 'example.com/products' 'example.com/products/a/b' 즉, 왜 'a'와'b '를 쿼리 매개 변수로 사용 하시겠습니까? URL의 일부가되는 대신에? 그것들을 URL의 일부로 만들면 경로는 간단합니다 : 복잡한 경로를 넣으십시오 ('a'와'b'가 먼저 필요함) 그리고 덜 복잡한 경로는 초입니다. – Cymen

+0

고맙지 만 리소스 인 경로 자체에서 일시적인 데이터를 인코딩하기 때문에 우리가하는 일이 아닙니다. 이는 데이터를 적절히 포맷하는 쿼리 문자열의 목적입니다. 당신의 첫 번째 제안까지, 네, 우리는 모든 것을 하나의 액션 메소드에 집어 넣고 어떤 뷰를 리턴 할 것인지를 결정할 수 있습니다 -하지만 그때 바보처럼 보이는 내 자신의 라우팅을하고 있습니다. 나를. – mvcstudent

+0

더 많은 토론이 stackoverflow에 있습니다. 이것은 적절할 수 있습니다 : http://stackoverflow.com/questions/968904/asp-net-mvc-url-routing-vs-querystring – Cymen

답변

1

소개 매개 변수. ASP.NET MVC는 '꽤'URL을 만들 수 있습니다, 그것은 당신이 무엇을해야하는지 정확히 :

첫째, 경로 매핑 :

routes.MapRoute(
    "SpecificProducts", 
    "products/{a}/{b}", 
    new { controller = "products", action = "Categories" } 
    ); 

routes.MapRoute(
    "ProductsIndex", 
    "products". 
    new { controller = "products", action = "Index" } 
    ); 

그런 다음 컨트롤러 액션

public ActionResult Index() 
{ 
} 

public ActionResult Categories(string a, string b) //parameters must match route values 
{ 
} 

이렇게하면 검색하기 쉬운 URL을 사용할 수 있으며 쿼리 문자열 매개 변수에 대해 걱정할 필요가 없습니다.

+0

조언 주셔서 감사합니다. 그럼에도 불구하고 매개 변수를 매개 변수로 사용할 수 있습니까? 그것이 IMHO를 수행하는 "적절한"방법입니다. 경로는 데이터 서식을 잊어 버려야합니다. 나는 여러 번 유사한 문제를 겪었습니다. MS 라우팅 직원들이 좋은 설계 작업을하지 못한 것 같습니다. – mvcstudent

+0

@mvcstudent : 실패한 ms 디자인이 아닙니다. 액션에서 null이 될 수있는 매개 변수 만 처리하면됩니다. 하나의 경로 만 사용하고 A와 B는 "선택적 매개 변수"로 설정하십시오. – Iridio

+0

하지만 여전히 질문에 대답하지 않습니다. 위의 시나리오에서 두 가지 경로를 사용할 수 있습니까? 게다가 사용자 정의 모델 바인더를 사용하므로 프레임 워크 제한으로 인해 해킹이 이상적이지 않습니다. – mvcstudent