2

私がやっていることは、自分のアプリケーションの動的ルーティングです。MVC、動的ルーティング、Unity、現在のコントローラがglobal.asaxに存在するかどうかを確認

たとえば、Application_BeginRequest()では、現在のコントローラを取得し、それが存在するかどうかを確認したいと思います。そうでない場合、私は、「データベースからの用語は、」有効であれば、私のURLは、データベース

からこの

mysite.com/termのように見える。しかしようにデフォルトルーティングを上書きするルートのセットを追加したいですコントローラー、デフォルトルーティングを使用したい

routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
     ); 

私はすでに自分のルートを私が望む方法で持っています。今は、現在のコントローラを取得し、それが存在するかどうかを判断するだけです。

The IControllerFactory 'MySite.Web.UnityControllerFactory' did not return a controller for a controller named 'term from database'.

コントローラが存在するかどうかを決定するためにグローバルからの団結を使用する方法があります:私は私のカスタムルートを追加しない場合、私はこのエラーを受け取りますか?

ありがとうございます!

答えて

3

あなたのデータベースからルートを登録し、あなたのglobal.asaxでコントローラルートを適用するユーティリティヘルパークラスを作成してみませんか?

DBルートが最初に登録されているので、有効なルートが見つかると、そのルートが最初に使用されます。または、逆に設定することもできます。余分な注記として、あなたのDBからのあなたのルートには、衝突を避けるために関連するRouteNameがあることを確認します。

 
public class Global : HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     //call utility to register routes from db 
     RouteHelper.RegisterRoutesFromDB(routes); 

     //now define my standard routes 
     routes.MapRoute(
      "Default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = "" } 
     ); 

     ... 
0

hereが解決策です。これを使用して、次のように各ルートの代替ルートを定義できます。

var defaultRoute = routes.MapReplaceableRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = 
    UrlParameter.Optional } 
     ); 

     var route = routes.MapRoute(
      name: "Dynamic", 
      url: "{name}", 
      defaults: new { controller = "Dynamic", action = "Index" }); 

     defaultRoute.AlternativeRoute = route; 
関連する問題