8

我有一个新闻网站,其中包含按类别标记的文章。

我的控制器称为“类别”,此 URL:

http://mysite.com/Category/Sport

传递SportIndex控制器​​中的操作Category

我想允许以下 URL:

http://mysite.com/Sport/Hockey
http://mysite.com/Sport/Football
http://mysite.com/Science/Evolution

它将所有类别信息传递给Index控制器​​中的操作Category

如何创建一个包罗万象的路线来处理所有这些并将它们分类?

4

2 回答 2

2

在这里,我的问题得到了很好的回应。

于 2008-10-20T15:39:57.177 回答
0

你可以这样做:

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

这样它就不会干扰您定义的其他路线。

于 2016-05-17T05:07:55.720 回答