2016-08-04 12 views
0

私は既存のMVC5アプリケーションでいくつかのドメイン名ロジックを実装しようとしています。私が実行している問題は、ルートからカスタムサブクラスを使用しようとするとネームスペースフィールドを尊重せず、2つの異なるユーザーコントローラがあるためにエラーをスローすることです。対照としてMVC5のカスタムルートとネームスペース

、これは完全に正常に動作します:

routes.MapRoute("Login", 
       "login/", 
       new { controller = "User", action = "Login" }, 
       new[] { "Quotes.Web.Controllers" }); 

マイDomainRouteクラスはルートから継承し、ちょうどドメインのプロパティを追加します。

public DomainRoute(string domain, string url, object defaults, string[] namespaces = null) 
     : base(url, new RouteValueDictionary(defaults), new MvcRouteHandler()) 
    { 
     Domain = domain; 
     DataTokens = new RouteValueDictionary {["Namespaces"] = namespaces}; 
    } 

と私はそれが好き登録:

var loginRoute = new DomainRoute(
    domain, 
    "login/", 
    new { controller = "User", action = "Login" }, 
    new[] { "Quotes.Web.Controllers" }); 
routes.Add("Login", loginRoute); 

DataTokens作業バージョン間で同一に見えると私の壊れたバージョンはまだ私のDomainRouteは、名前空間を持っているという事実を無視しているようだここでは、関連するコンストラクタがありますエントリ

「User」というコントローラに一致する複数のタイプが見つかりました。これは、このリクエストを処理するルート( 'login /')が、要求に一致するコントローラを検索するための名前空間を指定していない場合に発生します。このような場合は、 'namespaces'パラメータを取る 'MapRoute'メソッドのオーバーロードを呼び出してこのルートを登録します。

私は何が欠けていますか?

答えて

0

私はここで見つける多くの改良版で、私のDomainRouteクラスを切り替える:、さらに重要なより簡潔であるとされ...

var clientRoutes = new DomainRouteCollection("mydomain", 
              "Quotes.Web.Controllers", 
              routes); 
clientRoutes.MapRoute("Login", "login/", new { controller = "User", action = "Login" }); 

それが動作:今、私のルートの作成がちょうどあるhttps://gist.github.com/IDisposable/77f11c6f7693f9d181bb

1

私は以下のコード

var dataTokens = new RouteValueDictionary(); 
     var ns = new string[] {"MyProject.Controllers"}; 
     dataTokens["Namespaces"] = ns; 


     routes.Add("Default", new CultureRoute(
            "{controller}/{action}/{id}", 
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
            null /*constraints*/, 
            dataTokens 
           )); 
を追加することでこれを解決し、 this iが同じ問題を持っていた、あなたを助けるだろう、と思います
関連する問題