私は肯定的ではありませんが、これは MVC ルーティングの問題だと思います。MVC でルーティングがどのように機能するかをまだ完全には理解していません。
カスタム フィルター属性を適用したいくつかのアクション メソッドがあるとします。
[MyAttribute]
public ActionResult Method1()
{
...
}
[MyAttribute]
public ActionResult Method2()
{
...
}
これらのメソッドは通常、パラメーターを受け入れません。残念ながら、要件が変更されたため、これらのメソッドはすべて「MyParameter」というオプションのパラメーターを受け取る可能性があります。パラメータが渡されると、ViewBag のプロパティが設定されます。
実際のプロジェクトでは、これらのメソッドが 70 まであります。既に存在するため、「MyAttribute」フィルターを介して行うことを望んでいました。したがって、「MyAttribute」フィルターに次のようなものを追加します。
public class MyAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
... // other existing code
// If a certain parameter was passed, I want to set a ViewBag property.
if( filterContext.ActionParamenters.ContainsKey("MyParameter") )
filterContext.Controller.ViewBag.MyProperty = filterContext.ActionParamenters["MyParameter"];
}
}
ただし、メソッドの定義にパラメーターとして「MyParameter」が含まれていない限り、ActionParameters コレクションには表示されません。これが、ルーティングの問題だと私に思わせるものです。
すべてのメソッドに引数を追加する必要がないことを本当に望んでいますが、他に方法がない場合は追加できます。提案やアイデアをいただければ幸いです。