programing

다중 경로 값을 사용하는 ASP.NET MVC URL 라우팅

lastmoon 2023. 8. 5. 10:53
반응형

다중 경로 값을 사용하는 ASP.NET MVC URL 라우팅

저는 Html에 문제가 있습니다.둘 이상의 매개 변수가 필요한 경로가 있는 경우 ActionLink.예를 들어, myGlobal.asax 파일에 정의된 다음 경로를 지정합니다.

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}.mvc/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

routes.MapRoute(
    "Tagging",
    "{controller}.mvc/{action}/{tags}",
    new { controller = "Products", action = "Index", tags = "" }
);

routes.MapRoute(
    "SlugsAfterId",
    "{controller}.mvc/{action}/{id}/{slug}",
    new { controller = "Products", action = "Browse", id = "", slug = "" }
);

처음 두 경로는 문제 없이 작동하지만, 다음을 사용하여 세 번째 경로에 대한 작업 링크를 작성하려고 할 때:

<%= Html.ActionLink(Html.Encode(product.Name), "Details", new { id = product.ProductId, slug = Html.Encode(product.Name) }) %>

URL은 [site-root]/Details/1?slug=url-slug과 같은 URL로 끝나는 반면 URL은 [site-root]/Details/1/url-slug과 같은 URL로 끝납니다.

누가 내가 어디서 잘못되고 있는지 알 수 있습니까?

그것은 완전히 만족하는 첫 번째 경로를 사용하고 있습니다.당신의 것을 넣어보세요.SlugsAfterId위의 경로Default하나.

기본적으로 "기본값을 확인합니다.조치가 있습니까?네, 신분증 있어요?예. 이것을 사용하고 쿼리 문자열에 있는 다른 매개 변수를 버립니다."

참고로, 그것을 하는 것은 당신을 만들 것입니다.Default기본값을 제공하는 경로 중복slug매개 변수

게리(위)가 맞습니다.당신은 MVC를 위해 Haack씨의 루트 디버거를 사용할 수 있습니다.어떤 경로가 검색되고 언제 검색되는지 보여줌으로써 라우팅 문제를 해결하는 데 도움이 될 수 있습니다.

여기 블로그 포스트가 있습니다.그리고 여기 Zip 파일이 있습니다.

"id"를 포함하는 제약 조건을 경로에 추가할 수 있습니다. "id"는 숫자만 허용하기 때문입니다.이렇게 하면 첫 번째 경로는 "id"가 숫자일 때만 일치하고 다른 모든 값에 대해 두 번째 경로가 됩니다.그런 다음 {slug}이(가) 포함된 것을 맨 위에 놓으면 모든 것이 올바르게 작동합니다.

routes.MapRoute(
    "SlugsAfterId",
    "{controller}.mvc/{action}/{id}/{slug}",
    new { controller = "Products", action = "Browse", id = "", slug = "" },
    new { id = @"\d+" }
);

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}.mvc/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" },  // Parameter defaults
    new { id = @"\d+" }
);

routes.MapRoute(
    "Tagging",
    "{controller}.mvc/{action}/{tags}",
    new { controller = "Products", action = "Index", tags = "" }
);

언급URL : https://stackoverflow.com/questions/734249/asp-net-mvc-url-routing-with-multiple-route-values

반응형