2014-01-15 25 views
0

我目前遇到在ASP.NET MVC 4中設置路由的問題。設置ASP.NET MVC 4路由的任何URL

我試圖構建系統,能夠添加自定義路由頁面。例如,用戶可以添加新頁面並將其URL設置爲/about-us,並且每個像這樣創建的頁面都應執行PagesController動作GetPage並帶有參數URL。

我試圖評論中默認的URL默認值,然後我有安裝{*url}new { controller = "Pages", action = "GetPage", url = UrlParameter.Optional },這接縫OK,但是當我嘗試使用@Url.ActionLInk("Index", "Home"),我得到異常付諸行動的鏈接。

我已經設法解決,最後加入{*url}路由,但現在我遇到了多個參數如/company/about-us的URL的問題。當請求URL時,我得到異常The resource cannot be found,我知道這是因爲我有路由的URL:{controller}/{action}

那麼,有沒有一個解決方案來獲得與錯誤處理程序處理它的404

旁邊這些網址到我的控制器這是我目前RouteConfig.cs文件:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

     routes.MapRoute(
      "Pages", 
      "{*url}", 
      new {controller = "Pages", action = "GetPage", url = UrlParameter.Optional} 
      ); 
    } 

回答

0

要做到這一點的方式像您一樣有一條全路徑路線,然後將url作爲參數傳遞給GetPage方法,並使用它來加載和提供您的動態內容。

關於{controller}/{action}路線,此優先,因爲它出現之前你的全路徑。如果您想支持預定義頁面和自定義頁面,則需要在URL中具有唯一標識符,例如路徑前綴。或許,如果你希望所有的公司航線將在/公司/ XXX靜態地提供,創建一個路由這樣:

routes.MapRoute(
    name: "Company Pages", 
    url: "company/{action}" 
    defaults: new { controller = "Company" } 
); 
0

@Url.actionlink創建鏈接基於在Routeconfig定義的路由。所以...如果你唯一的擔心是與那個鏈接比,你可以使用html.actionlink or html.routelink你可以直接給路由名稱..如答案,如果你想你所有的匿名呼叫重定向到單個控制器,那麼你可以使用David Haney的解決方案,U還可以使用約束...如果還是,做滿足你的需求,那麼在哪裏使用custommvchandler

http://beletsky.net/2011/06/inside-aspnet-mvc-route-to-mvchanlder.html https://www.simple-talk.com/dotnet/.net-framework/asp.net-mvc-routing-extensibility/ http://geekswithblogs.net/sankarsan/archive/2009/01/18/developing-custom-routehandler.aspx

0

這聽起來像你建立某種‘CMS’的工具。

您應該創建一個自定義路由處理程序。

並且在該路由處理程序中,如果有任何具有當前url的頁面,則執行一次簡單檢查,如果是這樣,請將RequestContexts Controller和Action屬性更新爲Pagecontroller和您想要的Action,並且還可以傳遞頁面然後你就完成了。

看到我對這個職位的回答。 Database selection before routing in ASP.Net MVC

希望這會有所幫助!