2017-10-16 8 views
3

もっと伝統的なMVC実装の横に、Web APIを配置したい場所を実装しています。異なる名前空間に重複したコントローラ名を使用したルートテンプレート

構造のようになります。

私のコードで
+ Controllers 
    + Web 
    - Product.cs 
    + Api 
    - Product.cs 

、私はルートにApi名前空間に/api経由で来るすべての要求をしたい、とWeb名前空間のようなものに他のすべて:

// Want to indicate that these should all choose the the Api namespace 
routes.MapRoute(
    name: "api_route", 
    template: "api/{controller}/{action}/{id?}"); 

// Indicate that these should all choose the from the Web namespace. 
routes.MapRoute(
    name: "default_route", 
    template: "{controller}/{action}/{id?}"); 

私が見る限り、どの名前空間を選択するかを示す慣用的な方法はありません。これを行うより良い方法はありますか?または、コントローラごとにルートを手動で指定する必要がありますか?

編集: これは、レイザービューを使用している場合、これは疑問に思えるかもしれません。それにかかわらず、誰かが答えを持っているかどうか確認するため、これを残しておきます。

答えて

0

Owin/Katanaを使用すると、app.Mapを使用してリクエストパイプラインを分離することができます。 これらのシナリオを処理するには、次の2つのスタートアップコンフィギュレーションを使用します。

1)Owinスタートアップファイルを使用してホストWebApiを/apiにホストします。 MVCにおけるルートコレクションから/apiを省略

app.Map("/api", builder => 
{ 
    var config = new HttpConfiguration(); 
    builder.UseWebApi(config); 
}); 

2)は(

RouteTable.Routes.MapMvcAttributeRoutes(); 
RouteTable.Routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home",action = "Index",id = UrlParameter.Optional }); 

// Explicitly tell this route to be solely handled by the Owin pipeline. 
RouteTable.Routes.MapOwinPath("/api"); 
のGlobal.asaxで起動時)に設定します
関連する問題