ASP.NET MVC 사이트에 대한 캐치 all 경로를 어떻게 정의합니까?
-
03-07-2019 - |
문제
카테고리에 기사가 태그 된 뉴스 사이트가 있습니다.
내 컨트롤러는 "카테고리"라고 하며이 URL이라고합니다.
http://mysite.com/Category/Sport
패스 Sport
행동에 Index
컨트롤러에서 Category
.
다음 URL을 허용하고 싶습니다.
http://mysite.com/Sport/Hockey
http://mysite.com/Sport/Football
http://mysite.com/Science/Evolution
모든 카테고리 정보를 조치로 전달합니다 Index
컨트롤러에서 Category
.
이 모든 것을 처리하고 카테고리로 셔틀을 셔틀하는 캐치-모든 경로를 만드는 방법은 무엇입니까?
해결책
이 라인을 따라 내 질문에 꽤 좋은 응답이 있습니다. 여기.
다른 팁
당신은 다음과 같이 할 수 있습니다 :
routes.MapRoute("Default", "{category}/{subcategory}",
new { controller = "CategoryController", action = "Display", id = "" }
);
그런 다음 컨트롤러에서 :
public class CategoryController : Controller
{
public ActionResult Display(string category, string subcategory)
{
// do something here.
}
}
위의 경로가 모든 경로에 사용될 것이지 마십시오 (위의 경로 앞에 명시 적 경로를 지정하지 않는 한 정보 페이지 등을 가질 수는 없습니다).
그러나 경로를 기존 범주로만 제한하기 위해 사용자 정의 제약 조건을 포함 할 수 있습니다. 같은 것 :
public class OnlyExistingCategoriesConstraint : IRouteConstraint
{
public bool Match
(
HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection
)
{
var category = route.DataTokens["category"];
//TODO: Look it up in your database etc
// fake that the category exists
return true;
}
}
다음과 같이 경로에서 사용하는 것 :
routes.MapRoute("Default",
"{category}/{subcategory}",
new { controller = "CategoryController", action = "Display", id = "" },
new { categoryExists = new OnlyExistingCategoriesConstraint() }
);
그런 식으로 그것은 당신의 다른 정의 된 경로를 방해하지 않습니다.
제휴하지 않습니다 StackOverflow