2008-10-20 6 views
8

У меня есть сайт новостей со статьями, помеченными в категориях.Как определить общий маршрут для сайта ASP.NET MVC?

Мой контроллер называется "Категория" и этот URL:

http://mysite.com/Category/Sport

проходит Sport к действию Index в контроллере Category.

Я хочу, чтобы следующие ссылки:

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

Который передает всю информацию о категории к действию Index в контроллере Category.

Как создать универсальный маршрут, который обрабатывает все эти данные и переносит их в категорию?

ответ

2

Есть довольно хороший ответ на мой вопрос в этих строках here.

+0

hanks jmcd ..., что привело меня на правильный трек, и я выяснил остальное. (stackoverflow отлично) – WayneDV 2008-10-21 19:08:13

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. 
    } 
} 

Не, что любой маршрут выше будет использоваться для всех маршрутов (вы не можете иметь a О странице и т. д., если вы не укажете явные маршруты до указанного выше).

Однако вы можете включить пользовательское ограничение, чтобы ограничить маршрут только существующими категориями. Что-то вроде:

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

Таким образом она не будет мешать с другими определенными маршрутами.

 Смежные вопросы

  • Нет связанных вопросов^_^