2016-03-04 4 views
0

Я пишу несколько маршрутов для моего приложения MVC. У меня есть следующие маршруты для моего приложения:Поскольку я написал маршрут для конкретного действия контроллера, мне нужно написать маршрут для всех действий внутри Контроллера?

routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Pages", action = "Index", id = UrlParameter.Optional } 
      ); 

Маршрут выше, используется, когда я хочу, чтобы получить доступ к значениям по умолчанию, как:

www.servicili.com/budget/edit/1

www.servicili.com/professional/view/234

Но я создаю следующий маршрут для конкретной цели:

routes.MapRoute(
       name: "Perfil", 
       url: "{UsuApelido}", 
       defaults: new { controller = "Perfil", action = "Index"} 
      ); 

маршрут выше, используется для получения доступа к URL-профиль о «водопроводчика», например: www.servicili.com/MarkZuckberg

профиль детали на контроллере Perfil и Действие Индекс, однако, поскольку я написал этот маршрут, все остальные действия не работают.

Например: Если я пытаюсь получить доступ к Index действия внутри другого контроллера, он перенаправляет на Индекс из PERFIL.

- Вопрос в том, что, поскольку я написал маршрут для конкретного действия контроллера, мне нужно написать маршрут для всех действий внутри Контроллера?

ответ

2

Чтобы решить вашу проблему попробовать, как это,

Сначала определите ограничение,

public class PlumberUrlConstraint: IRouteConstraint 
{ 
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     var db = new YourDbContext(); 
     if (values[parameterName] != null) 
     { 
     var UsuApelido = values[parameterName].ToString(); 
     return db.Plumbers.Any(p => p.Name == UsuApelido); 
     } 
     return false; 
    } 
} 

Определить два пути, поставить "по умолчанию" маршрут на 2-й позиции

routes.MapRoute(
      name: "Perfil", 
      url: "{*UsuApelido}", 
      defaults: new { controller = "Perfil", action = "Index"}, 
      constraints: new { UsuApelido = new PlumberUrlConstraint() } 
     ); 

routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Pages", action = "Index", id = UrlParameter.Optional } 
     ); 

Теперь, если у вас есть «Индекс» в контроллере Perfil, вы можете получить имя водопроводчика, как это,

public ActionResult Index(string UsuApelido) 
{ 
    //load the content from db with UsuApelido 
    //display the content with view 
} 

Надеюсь, что эта помощь.

+0

Нужно только исправить код и добавить} в конце Constring: new ... Знаете ли вы ссылку, чтобы получить дополнительную информацию о том, как учиться создавать маршруты в MVC? tks очень – Dan

+0

Вы можете попробовать [эту ссылку] (http://www.asp.net/mvc/overview/controllers-and-routing) –

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