Je travaille sur un projet MVC où les actions du contrôleur concernent les ressources. Différents contrôleurs prennent dans le paramètre assetId de manière différente: Certains contrôleurs simplement obtenir int assetId
, d'autres int id
, et d'autres à l'aide d'un objet complexe AssetDTO dto
(qui contient une propriété qui détient le assetId)Récupérer un objet complexe à partir d'ActionParameters
Je suis en train d'écrire un ActionFilter qui est ajouté à la méthode d'action et est fourni avec le nom d'actionParameter où je peux obtenir la valeur de l'actif.
Méthode d'action:
[AssetIdFilter("assetId")]
public ActionResult Index(int assetId)
{
...
}
L'attribut est défini comme:
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))
{
......
}
}
Cela fonctionne comme prévu, mais ne fonctionnera que lorsque le assetId est fourni primitive. Je ne suis pas sûr que faire quand assetId est fourni dans un objet complexe dans la méthode d'action. Dois-je analyser chaque objet différemment selon le type? J'espère que je peux spécifier une sorte de notation de point dans le AssetIdFilter pour indiquer où l'assetId est localisé: dto.assetId
N'importe quelle manière je peux employer la dynamique? ou réflexion? ect. ???