문제

내가 조금이 붙어의 디자인에 나 seo 친절한 url mvc....예를 들어 다음과 같은 url:http://myapp/venues/resturants.aspx?location=central&orderBy=top-rated

내 mvc 로 맵핑한 다음과 같다:http://myapp/venues/list/resturants/central/top-rated
{컨트롤러}/{action}/{카테고리}/{위치}/{주문}

지금 문제는 위치 및 순서는 선택적인...그래서 그것이 있어야 가능한 요청을 제출하려면 다음과 같: http://myapp/venues/list/resturants/top-rated .이를 증명하는 경우 문제가 요청을 숙박 컨트롤러의 동작,위치를 매개 변수는"최상급"자연스럽게.

어떤 방법이 있나요?I'am 고려 사용하여 명시적 쿼리 문자열을 처리할 하나 이상의 매개 변수 그러나 이것은 정말 나의 옵션을 마지막으로 전체적으로 깔끔하고 희생 SEO 너무 많.

사람이 있습니다.으로 실행한 딜레마는?그리고 당신은 어떻게 처리하나요?

사전에 감사합니다!

도움이 되었습니까?

해결책

위치와 순서에 대한 허용 값이 독특하다고 가정하면 (예 : 그들이 들어올 때, 당신은 그들에게 구별 할 수 있습니까, 아니면 하나만 공급할 경우, 그것이 위치인지 주문인지 어떻게 알 수 있습니까?) 두 개의 매개 변수를 가져 와서 컨트롤러에있는 내용을 해결할 수 있습니다.

노선: {controller}/{action}/{param1}/{param2}

컨트롤러 동작 :

public ActionResult MyAction(string param1, string param2)
{
    string location;
    string order;
    if (!ParseLocation(param1, out location))
    { ParseLocation(param2, out location); }
    // ...
}

특히 우아하지는 않지만 원하는 URL을 가질 수 있습니다.

다른 팁

당신의 클릭 프로필 링크 통계, 최근, 응답 등의 URL을보십시오.

예 :

종류가 없으면 기본적으로 통계에 대한 기본값이 있습니다

선택적 매개 변수는 쿼리 매개 변수 여야합니다

여러 선택적 매개 변수가 있으면 항상이 문제가 발생합니다. 하나 또는 둘 다 중 하나 또는 둘 다를 옵션을 사용하지 않고 (선택 사항보다 쿼리 문자열에서 앞서 배치) 쿼리 스트링 매개 변수 표기법을 사용하십시오.

좋아, 방금 내가 지금까지 놀고 있었던 솔루션을 게시하는 것입니다.

다음과 같이 제약 조건을 사용하여 경로를 설정했습니다.

        routes.MapRoute(
            "VenuesList",                                              
            "venues/list/{category}/{location}/{orderBy}",             
            new { controller = "venues", action = "list", category = "", location = "", orderBy = "" },
            new { location = "central|east|west|south", orderBy = "top-rated|price" }
        );

    routes.MapRoute(
            "VenuesListByLocation",                                              
            "venues/list/{category}/{location}",                           
            new { controller = "venues", action = "list", category = "", location = "" },
            new { location = "central|east|west|south" }
        );

        routes.MapRoute(
            "VenuesListByOrder",                                              
            "venues/list/{category}/{orderBy}",                           
            new { controller = "venues", action = "list", category = "", orderBy = "" },
            new { orderBy = "top-rated|price" }
        );

        routes.MapRoute(
            "VenuesListDefault",                                              
            "venues/list/{category}",                           
            new { controller = "venues", action = "list", category = "" }

        );

        routes.MapRoute(
            "Default",                                              
            "{controller}/{action}/{id}",                           
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        ); 

아이디어는 유효성 검사에 실패하면 목록의 다음 경로로 이동한다는 것입니다. 결국 기본값을 누르십시오.

더 많은 테스트가 필요하지만 지금까지 잘 작동했습니다 ...

당신은 왜 만들 속에서 페이지에 대한 각각의 가능한 쿼리 문자열 변?

이를 처리할 수 있는 유일한 방법을 보여 그것을 당신이 선택하는 어떤 방법으로 단 몇 줄의 코드...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top