コントローラアクションがAssetsを処理するMVCプロジェクトで作業しています。異なるコントローラは、異なる方法でassetIdパラメータに取る:一部のコントローラには、単に私がに追加されたのActionFilterを書いています(assetIdを保持しているプロパティを含む)複雑なオブジェクトAssetDTO dto
ActionParametersから複雑なオブジェクトを取得します。
を使用してint assetId
、他のint id
、およびその他の取得しますこのアクションメソッドにはactionParameter名が与えられ、そこで私は資産価値を得ることができます。
アクションメソッド:
[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が複雑なオブジェクト内でアクションメソッドに提供されているときに何をすべきかわかりません。
タイプごとにオブジェクトを別々に解析する必要がありますか?私はAssetIdFilterで何らかのドット表記法を指定して、assetIdがどこにあるかを指定することができます:dto.assetId
どのようにしてダイナミクスを使用できますか?または反射?? ect。???