2015-08-13 2 views
0

Я работаю с веб-сайтом с MVC4. Basic мой веб-структура:Как настроить маршрут в MVC 4

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

Но у нас есть одна страница необходимость доступа с URL, как: ABC.com/vairable. Как настроить. я конфиг, как показано ниже: а нужно открыть с URL: ABC.com/Make/vairable:

 routes.MapRoute(


    "New", 
     "Make/{PROMOTION_NAME}", 
     new { controller = "Redeem", action = "MakeRedeem", PROMOTION_NAME = UrlParameter.Optional }, 
      null, 
      new[] {"Project.Web.Controllers"}); 
+0

Только в случае: порядок имеет значение, все ваши пользовательские маршруты должны быть объявлены * до * маршрута по умолчанию. Источник: http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/creating-custom-routes-cs –

ответ

1

Вам необходимо создать собственное ограничение для своей роли. И добавьте свою роль перед ролью по умолчанию. Пользовательское ограничение предотвращает совпадение всех введенных пользователем URL-адресов и фильтрации нерелевантных URL-адресов, чтобы другие роли могли соответствовать им. Рассмотрим это:

public class MyCatConstraint : IRouteConstraint 
{ 
    // suppose this is your promotions list. In the real world a DB provider 
    private string[] _myPromotions= new[] { "pro1", "pro2", "pro3" }; 

    public bool Match(HttpContextBase httpContext, Route route, 
     string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     // return true if you found a match on your pros' list otherwise false 
     // In real world you could query from DB 
     // to match pros instead of searching from the array. 
     if(values.ContainsKey(parameterName)) 
     { 
       return _myPromotions.Any(c => c == values[parameterName].ToString()); 
     } 
     return false; 
    } 
} 

теперь добавить роль, прежде чем роли по умолчанию с MyConstraint:

routes.MapRoute(
    name: "promotions", 
    url: "{PROMOTION_NAME}", 
    defaults: new { controller = "Redeem", action = "MakeRedeem" }, 
    constraints: new { PROMOTION_NAME= new MyCatConstraint() }, 
    namespaces: new[] {"Project.Web.Controllers"} 
); 

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

Теперь URL example.com/pro1 сопоставляется Redeem.MakeRedeem метод действия, но example.com/admin сопоставляется Admin.Index

+0

Спасибо sam farajpour ghamari. он хорошо работает –

1

У нас есть одна страница необходимо получить доступ с URL, как: ABC.com/vairable

Существует в основном 3 варианта, но я не могу привести примеры, потому что вы не указали какую-либо информацию о том, что ожидается в «переменной».

  1. Использовать RegEx route constraint.
  2. Используйте custom route constraint.
  3. Создание пользовательского подкласса RouteBase. См. this example.
+0

Я встречаюсь с проблемой. для доступа к этой странице URL-адрес ABC.com/Make/Variable. Но я просто хочу URL: ABC.com/variable. , и в нашем контроле действие «MakeRedeem» получит эту переменную. , если пользователь только вводит URL: ABC.com, {PROMOTION_NAME} имеет значение null else, имеет значение –

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