2017-10-12 21 views
1

アプリケーションが煩雑になるのを防ぐために、私は作業を開始しました。
http://localhost:49358/Document/Document/
の代わりに:しかし、今、私は常に呼び出す必要があり
http://localhost:49358/Document/
どうすれば地域の名前でコントローラにアクセスするために、私のルートを変更できますか? 私は私のプロジェクトの内、以下のフォルダ構造を持っている(なしにHomeController)エリアとコントローラ名(asp.netコア)を使用したルーティング

Folderstructure inside my Project
地への私のルートのコードは次のようになります。

routes.MapRoute(name: "areaRoute",template: "{area:exists}/{controller=Home}/{action=Index}"); 

そして、私が置か[Area( "Document")] DocumentController内のタグ。

編集:
Shyjuとジェイミー・テイラーによって示唆されるように私はHomeControllersと一緒に行きました。 (迅速な解答と解説のためにあなたの両方をありがとう)

私の構成は次のようになりますし、期待のようなルーティングが働いている:
enter image description here

私にとっては非常に多くのHomeControllersとインデックスを持っていることはまだ少しdissapointingですファイル。コードをナビゲートすることは、もはやそれは容易ではありません。
enter image description here

EDIT2:
これらすべてのHomecontrollersとあまりにもイライラ取得した後、私はジェイミー・テイラーが提案するソリューションで行き、機能フォルダ内のすべてをrearanged。それはもう少し構成が必要ですが、私の意見ではもっときれいです。
またさらに、このマイクロソフトの記事で説明されている(ただ、地域のものをスキップ):
https://msdn.microsoft.com/en-us/magazine/mt763233.aspx

私の構造は次のようになりますし、ルーティングは魔法のように動作し、コントローラ名はまだ意味がある:
enter image description here

+0

私はそれが何のための領域であるかわからない。おそらく、あなたのアーキテクチャを考え直すべきでしょう。おそらく、インデックスページのように機能し、ドキュメントインデックスビューのすべての機能を提供するドキュメント領域の下にかみそりページを追加することができます。 –

+0

"関連する機能をグループ化して別の名前空間としてグループ化するASP.NET MVC機能(ルーティング用)とフォルダ構造(ビュー用)がわかりました。それ以外は何をお勧めしますか? – Yush0

+0

私の編集が完了する前にあなたはそこに行きました:P –

答えて

1

私はそれがどの領域であるかはわかりません。おそらく、あなたのアーキテクチャを考え直すべきでしょう。

私のASP.NET MVC Core application templateでは、フィーチャーフォルダーを利用しましたが、これは少し似通ったものです。これを行うには

、私はConfigureServicesメソッドに以下を追加しました:

FeatureLocationExpanderがある
serviceCollection.Configure<RazorViewEngineOptions>(options => 
{ 
    options.ViewLocationExpanders.Add(new FeatureLocationExpander()); 
}); 

:によって返される新しい文字列[]の内容を交換

public class FeatureLocationExpander : IViewLocationExpander 
{ 
    public void PopulateValues(ViewLocationExpanderContext context) 
    { 
    // Don't need anything here, but required by the interface 
    } 

    public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations) 
    { 
    // The old locations are /Views/{1}/{0}.cshtml and /Views/Shared/{0}.cshtml 
    // where {1} is the controller and {0} is the name of the View 

    // Replace /Views with /Features 
    return new string[] 
    { 
     "/Api/{1}/{0}.cshtml", 
     "/Features/{1}/{0}.cshtml", 
     "/Features/Shared/{0}.cshtml" 
    }; 
    } 
} 

お住まいの地域のExpandViewLocationsは、ルーティング属性を追加する必要がないことを意味します。

しかし、これはあなたの問題を解決するものではありません。

ドキュメント領域のインデックスページとして機能する領域Documentsの下に(Index.cshtmlという名前の)カミソリページを追加していない限り、このIndex.cshtmlは、あなたの/Documents/Documents/Index.cshtml内のIndex.cshtmlのすべての機能を、コントローラのように機能するコードビハインドのようなファイル(ASP.NET Webフォームを思い出してください)を追加したボーナスと共に提供することができます。

+0

私はいくつかの手品を取ったが、これは私が探していたもので、きれいな方法です。あなたの例とこの記事は私がそれを手伝ってくれました: https://msdn.microsoft.com/en-us/magazine/mt763233.aspx – Yush0

+0

私は私が助けることができてうれしいです。 –

2

エリアのデフォルトルート登録では、URLのコントローラのデフォルト値としてHomeControllerが使用されます。 DocumentControllerをデフォルトにしたい場合は、それをStatrtUpクラスで更新します。

app.UseMvc(routes => 
{ 
    routes.MapRoute(
     name: "areas", 
     template: "{area:exists}/{controller=Document}/{action=Index}/{id?}" 
    ); 
}); 

app.UseMvc(routes => 
{ 
    routes.MapRoute(
     name: "default", 
     template: "{controller=Home}/{action=Index}/{id?}"); 

}); 

(私たちはURLテンプレートで{area:exists}を持っているので)だけでドキュメントエリアない、その登録コードがのためにすべての既存の領域であることに留意してください。つまり、リクエストがyourApp\someAreaNameのようになると、フレームワークはDocumentControllerのインデックスアクション(someAreaName)にリクエストを送信します。

文書に関するコードを文書領域に整理しました。なぜあなたのコントローラ名が文書である必要があるのですか?私は感じ、それは繰り返しです。

ドキュメントエリア内のの名前をHomeControllerに変更し、エリアレジストレーション(HomeControllerをURLテンプレートのデフォルトコントローラ値として使用する)のデフォルトルート登録コードを使用します。このようにして、あなたの将来の領域ではうまくいくでしょうし、コードはもっときれいに見えます。 IMHO、任意の領域のHomeControllerは、どの領域のDocumentControllerが混乱しても意味があります。

app.UseMvc(routes => 
{ 
    routes.MapRoute(
     name: "areas", 
     template: "{area:exists}/{controller=Home}/{action=Index}/{id?}" 
    ); 
}); 
+0

ありがとうございました。私はこのアプローチについてもつまずきました。しかしこれは、新しい "モジュール"があるたびにstartup.csに新しいエントリがあることを意味します。 {area:exists}/{controller = }/{action = Index}/{id?} – Yush0

+0

はい。それで、私はあなたのコントローラをDocumentからHomeへと改名することをお勧めしました。(あなたはすでにドキュメントエリアにコードを編成しています。なぜコントローラの名前が繰り返し表示されるのですか?)将来は。 – Shyju

関連する問題