私は、コントローラーアクションがアセットを処理するMVCプロジェクトに取り組んでいます。さまざまなコントローラーがさまざまな方法でassetIdパラメーターを受け取ります。一部のコントローラーは、単純にint assetId
、その他int id
、およびその他を複雑なオブジェクトAssetDTO dto
(assetIdを保持するプロパティを含む)を使用して取得します。
アクションメソッドに追加され、アセット値を取得できるactionParameter名が指定されたActionFilterを作成しています。
アクション方法:
[AssetIdFilter("assetId")]
public ActionResult Index(int assetId)
{
...
}
属性は次のように定義されます。
public class AssetIdFilterAttribute : ActionFilterAttribute
{
public string _assetIdParameterKey { get; set; }
public AssetIdFilterAttribute (string assetIdParameterKey)
{
_assetIdParameterKey = assetIdParameterKey;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
int assetId;
if (Int32.TryParse(filterContext.ActionParameters[_assetIdParameterKey].ToString(), out assetId))
{
......
}
}
これは期待どおりに機能しますが、assetIdがプリミティブとして提供されている場合にのみ機能します。複雑なオブジェクト内でassetIdがactionメソッドに提供された場合の対処方法がわかりません。
タイプに応じて各オブジェクトを異なる方法で解析する必要がありますか?AssetIdFilterである種のドット表記を指定して、assetIdがどこにあるかを示すことができることを望んでいます:dto.assetId
ダイナミクスを使用する方法はありますか?または反射?? ect。???