ASP.NET MVC 사이트에 대한 캐치 all 경로를 어떻게 정의합니까?

StackOverflow https://stackoverflow.com/questions/218845

  •  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() }
);

그런 식으로 그것은 당신의 다른 정의 된 경로를 방해하지 않습니다.

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