gpt4 book ai didi

asp.net-mvc-3 - 从 ActionParameters 检索复杂对象

转载 作者:行者123 更新时间:2023-12-03 17:56:16 24 4
gpt4 key购买 nike

我正在开发一个 MVC 项目,其中 Controller 操作处理 Assets 。不同的 Controller 以不同的方式接收 assetId 参数:一些 Controller 简单地获取 int assetId , 其他 int id ,以及其他使用复杂对象的 AssetDTO dto (其中包含一个持有 Assets ID 的属性)

我正在编写一个 ActionFilter,它被添加到 action 方法中,并提供了 actionParameter 名称,我可以在其中获取 Assets 值。

Action 方法:

    [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 中指定某种点符号来告诉它 Assets ID 的位置:dto.assetId

有什么办法可以使用动力学吗?还是反射(reflection)??等等???

最佳答案

和这里 动态来救援。您可以将 actionFilterAttribute 更改为:

        public override void OnActionExecuting(ActionExecutingContext filterContext)
{
dynamic assetIdHolder = filterContext.ActionParameters[_assetIdParameterKey];
if (assetIdHolder.GetType().IsPrimitive)
{
//do whatever with assetIdHolder
}
else
{
//do whatever with assetIdHolder.assetId
}
}

干杯!

关于asp.net-mvc-3 - 从 ActionParameters 检索复杂对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13537389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com