1

一連のアクション メソッドをChildActionOnly属性で装飾することを忘れないようにする代わりに、コントローラー全体ですべてのメソッドをそのように指定できると便利です。

コントローラー クラスに属性を配置しようとしてChildActionOnlyも (少なくとも私のコード コンテキストでは) 機能しません。これは、要求パイプラインの初期段階で発生するコントローラーの依存性注入中に、HttpContext または Request オブジェクトがなく、 「このコンテキストではリクエストを使用できません」というエラーがスローされます。

RouteConstraintルート自体を強制するを作成できますChildActionOnlyか? 同じリクエスト パイプラインの問題のため、これは疑わしいと思われます。RouteConstraints の実行中に HttpContext が使用可能になるかどうかはわかりません。これを実装する方法についてアイデアがある場合は、共有してください。

ChildActionOnlyリフレクションを使用して特定のコントローラーのすべてのアクション メソッドを検出し、属性が設定されていることを確認する単体テストを作成することもできます...

どうすればこれを達成できますか? いくつかのスターター コードを提供していただけますか (洗練されている必要はなく、機能する必要さえありません。出発点だけでも役に立ちます)。

4

2 に答える 2

3

これを自分で正確に達成する方法をグーグルで調べているときに、この質問と回答を見つけました。
この質問は具体的には MVC4 を対象としていますが、私の回答は直接には当てはまりませんが、MVC 5[ChildActionOnly]がコントローラー全体での属性の使用をサポートするようになり、次のことが可能になったことを指摘することは依然として関連があるように思われました。

namespace MyWebApp.Controllers
{
   [ChildActionOnly]
   public class MyController
   {
      //Can only be called from another action
      public ActionResult MyAction()
      {
         return View();
      }
   }
}

http://myapp.com/MyController/MyActionに直接移動すると、次の結果が返されます。

Server Error in '/' Application.

The action 'MyAction' is accessible only by a child request. 
  Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace

エラーの詳細と、コード内のどこで発生したかについては、.

 Exception Details: System.InvalidOperationException: The action 'MyAction' is accessible only by a child request.
于 2015-09-18T10:23:00.940 に答える