2017-07-21 8 views
1

ほとんどのリクエストが専用コントローラで処理される状況があります。C#Web Api 2リクエストをデフォルトコントローラにリダイレクトする方法

config.Routes.MapHttpRoute(
      name: "DataApi", 
      routeTemplate: "api/{controller}/{action}", 
      defaults: new 
      { 
       controller = "default" 
      } 
    ); 

ただし、URLに基​​づいてcontrollerが見つからない場合があります。 api/this_controller_is_not_exists/GetStatusのように。

これらのリクエストをdefaultというデフォルトコントローラーにリダイレクトして、デフォルトのコントローラー内のアクションを使用してこの要求を処理するにはどうすればよいですか? デフォルトコントローラの有効な要求は、api/default/GetStatusのようになります。

有効なリクエストと無効なリクエストでは、経路はそれほど変わりません。有効 :

'api/this_controller_exist/GetStatus' 

無効:

まあ
'api/this_controller_not_exists/GetStatus' 
+0

defaultControllerの機能は何ですか? –

+0

@ChetanRanpariya:デフォルトロジックを使用してさらに処理するためのパラメータとして 'this_controller_not_exists'をパラメータとして使用できるデフォルトアクションが含まれています。 – Wiktor

+0

回避策として、404エラーを処理し、デフォルトコントローラーに手動でリダイレクトすることができます –

答えて

1

あなたはdefaultという名前のデフォルトルートのマッピングを持っているし、あなたのコントローラが実際に存在しなければ、それは後に自動的にあなたのコントローラthis_controller_exist原因にリクエストをマッピングするかどうかリクエストされたURIはRouteDataを通過し、HttpControllerSelectorにフィードされます。HttpControllerSelectorは、APIプロジェクトのすべてのコントローラを取得しようとします。ApiControllerからリフレクションを継承します。したがって、質問のコントローラーが実際に存在し、ApiControllerから派生している場合は、既定のルートマッピングがWebApiConfigにある場合は問題にはなりません。それ以外の場合は、IISリソース処理に依存し、404 resource not foundエラー。

+0

ありがとうございました、実際に私に解決策を指摘しました。あなたが「デフォルトコントローラー」でデフォルトで動作するはずだと言いましたが、なぜ私にとってはうまくいかないのか探し始めました。私の 'default controller class'は'抽象 'クラスではないことがわかりました。だから '抽象DefaultClass:ApiController'の代わりに' DefaultClass:MyBaseClass'を使用しています。ここで 'MyBaseClass'は抽象MyBaseClass:ApiController'です。 – Wiktor

関連する問題