4

使用圖書館AttributeRouting使用自定義路由處理程序,我就能夠配置屬性路由到使用自定義的路由處理(繼承MvcRouteHandler):與MVC5屬性路由

routes.MapAttributeRoutes(cfg => 
    { 
     cfg.UseRouteHandler(() => new MultiCultureMvcRouteHandler()); 
    } 
); 

此外,MVC5之前,它是可以改變任何現有的路由的路由處理:使用屬性路由

(routes["myroute"] as Route).RouteHandler = new MyCustomRouteHandler(); 

隨着MVC5,路由集合包含內部類(例如,RouteCollectionRoute),並且似乎無法更改路線的RouteHandler屬性。

如何更改在MVC5.1中使用屬性路由時使用的默認路由處理程序?

+0

您是指路線限制嗎? –

+0

@SteveAndrews不,這個問題是關於改變RouteHandler。但它看起來像這是不可能的,至少不與MVC5.1中的屬性路由:( – marapet

+0

是的RouteHandler肯定仍然可以改變,聽起來像該庫只需要更新。 – JuhaKangas

回答

0

創建您自己的RouteAttribute。

檢查這裏的文檔:http://msdn.microsoft.com/en-us/library/system.web.mvc.routeattribute(v=vs.118).aspx

實現這些接口,並在CreateRoute方法,你可以選擇你的RouteEntry對象routehandler。

我還沒有嘗試過,但像下面這樣,你需要做一些更多的工作,但這應該讓你走上正軌。

public class MyRouteAttribute : Attribute, IDirectRouteFactory, IRouteInfoProvider 
{ 
    public RouteEntry CreateRoute(DirectRouteFactoryContext context) 
    { 
     return new RouteEntry("Test", new Route("Url", new CustomRouteHandler())); 
    } 

    public string Name 
    { 
     get { throw new NotImplementedException(); } 
    } 

    public string Template 
    { 
     get { throw new NotImplementedException(); } 
    } 
} 
+0

MapMvcAttributeRoutes()將自動映射您的自定義路由屬性時使用這些接口的方式 – JuhaKangas

+0

但這意味着不僅要使用自定義屬性無處不在,而且還要重新實現DirectRouteFactoryContext正在做,看起來更加複雜;) – marapet

+0

我只能同意y ou,我不得不使用自定義屬性,但重新實現CreateRoute看起來並不太好。一個可以繼承的路徑屬性(它現在被封閉),允許設置路由處理器會很好。 但是,這是我現在能夠找到的唯一選擇。 – JuhaKangas