2011-07-11 126 views
0

我創建一個在線日誌查看器應用程序,它讀取由許多應用程序生成的日誌到一個單一的公共數據庫。日誌類型是錯誤的,致命的,調試,我用全部代表所有的日誌。ASP.NET MVC路由幫助必

我有一個名爲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的Action方法中配置路由設置參數以使其工作?

+0

您的預期成果是什麼?即你希望「/ apps /」之後的所有內容都被當作方法的參數,並根據這個參數檢索數據? – GalacticCowboy

+0

我會把'last-hundred'' last-hundred'和'all'設爲尋呼參數。我也會讓'all'和'2011'成爲querystring參數。錯誤應該是從ActionFilter中取出的「共享視圖」。然後你只剩下'apps'控制器和'bi-reports'操作。 –

+0

記住,你可以發送一個參數來操作,它不使用'myParameter = all' - 你可以跳過它,並有'/ all' –

回答

1

這是你的路由定義大概的瞭解。我可以看到你基本上有三種途徑:

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

我已經設置一年約束19002199之間的匹配年,月,使他們居然要01指定一個有效的一個月12

如果您有任何額外的控制器則必須定義一個默認路由,以及,把控制器約束在這一個或使控制器名稱靜態的(只是一個適用時)。

0

我會做一些沿着這些路線

''# 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