Требуется помощь по маршрутизации ASP.NET MVC - PullRequest
0 голосов
/ 11 июля 2011

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

У меня есть контроллер с именем AppsController, который должен обслуживать представления для следующих запросов, где «би-отчеты» являются одним изу нас много имен приложений.

/apps/bi-reports/
/apps/bi-reports/all
/apps/bi-reports/error/
/apps/bi-reports/2011/04/
/apps/bi-reports/2011/04/all
/apps/bi-reports/2011/error
/apps/bi-reports/2011/04/error
/apps/bi-reports/all/last-hundred
/apps/bi-reports/all/most-hundred
/apps/bi-reports/2011/last-hundred
/apps/bi-reports/2011/04/all/last-hundred

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

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Это грубая идея вашего определения маршрутизации. Я вижу, что у вас есть три типа маршрутов:

routes.MapRoute(
    "IrrelevantDates",
    "{controller}/{application}/{type}/{range}",
    // defaults
    new {
        controller = "Apps",
        action = "UnboundReport",
        type = "all",
        range = "no-limit"
    },
    // constraints
    new {
        type = "apps|error"
    }
);

routes.MapRoute(
    "RelevantYearOnly",
    "{controller}/{application}/{year}/{type}/{range}",
    // defaults
    new {
        controller = "Apps",
        action = "YearlyReport",
        type = "all",
        range = "no-limit"
    },
    // constraints
    new {
        year = "19\d{2}|2[01]\d{2}",
        type = "apps|error"
    }
);

routes.MapRoute(
    "RelevantYearAndMonth",
    "{controller}/{application}/{year}/{month}/{type}/{range}",
    // defaults
    new {
        controller = "Apps",
        action = "MonthlyReport",
        type = "all",
        range = "no-limit"
    },
    // constraints
    new {
        year = "19\d{2}|2[01]\d{2}",
        month = "0[1-9]|1[0-2]",
        type = "apps|error"
    }
);

Я установил ограничение по году, чтобы оно совпадало с годами между 1900 и 2199 и месяцами, поэтому им фактически необходимо указать действительный месяц 01 до 12.

Если у вас есть какие-либо дополнительные контроллеры, вам нужно будет также определить маршрут по умолчанию и наложить на него ограничение контроллера или сделать статическим имя контроллера (если применяется только один).

0 голосов
/ 11 июля 2011

Я бы сделал что-то в этом духе

    ''# note, this is untested VB and might need some tweaking.
    routes.MapRouteLowercase("Base", "",
                             New With {.controller = "Home",
                                       .action = "Index",
                                       .year = UrlParameter.Optional,
                                       .paging = UrlParameter.Optional},
                             New With {.year = "[0-9]*"})

Тогда у вашего контроллера будет что-то вроде

    Function Index(ByVal paging As String, ByVal year As Integer?) As ActionResult

        ''# do your pre-processing for paging and year.

        Return View()
    End Function
...