我正在开发一个 MVC 项目,其中控制器操作处理资产。不同的控制器以不同的方式获取assetId 参数:一些控制器简单地获取int assetId
、其他int id
和其他使用复杂对象AssetDTO dto
(其中包含保存assetId 的属性)
我正在编写一个 ActionFilter,它被添加到 action 方法中,并提供了 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
有什么办法可以使用动态?还是反思??等等???