Ограничение URL для числовых идентификаторов - PullRequest
1 голос
/ 05 августа 2009

Я пытаюсь создать некоторые ограничения URL для контроллеров, чтобы предотвратить исключения нулевых ссылок.

Например

/ folder / edit / 3 должно быть в порядке

/ folder / edit / asdf не должно быть в порядке

Вместо добавления регулярных выражений для каждого метода действия, я хочу использовать для этого ограничения URL.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что маршрут по умолчанию перехватывает все запросы, или, если я добавляю это ограничение к маршруту по умолчанию, стандартный запрос, такой как http://host.tld/, больше не работает.

Я пытаюсь добавить ограничение

routes.MapRoute(
    "RouteWithContraint",
    "folder/edit/{id}",
    new { controller="folder", action="edit", id="" },
    new { id = @"\d+" }
);

Кто-нибудь подскажет мне, как решить эту проблему? Или, может быть, кто-то знает лучшую практику на СУХОЙ для проверки "IsANumber" для идентификаторов?

С наилучшими пожеланиями,

Gordon

Ответы [ 2 ]

1 голос
/ 10 февраля 2010

Порядок добавления маршрутов имеет значение. При поступлении запроса маршруты проверяются один за другим, пока не будет найдено совпадение. Поэтому вам нужно упорядочить маршруты от наиболее специфических до наименее специфических.

Возможно, вы уже пробовали это, но если вы добавите свой собственный маршрут до маршрута по умолчанию, вам больше повезет?

1 голос
/ 06 августа 2009

Как насчет создания пользовательского атрибута ActionFilterAttribute для проверки типа некоторых действий и / или контроллеров? Пример метода OnActionExecuting класса, унаследованного от ActionFilterAttribute:

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
      if (filterContext.RouteData.Values["action"] == "edit" && !IsProperTypeofId()) 
         RedirectToRoute(filterContext, new { controller = "General", action = "Error", id = 401 });

      base.OnActionExecuting(filterContext);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...