有没有办法在模型绑定阶段获取动作并读取任何属性?
场景是这样的:
我为某种数据类型设置了默认模型绑定器,但取决于它的使用方式(通过操作上的属性控制),我需要忽略一组数据。
我可以在控制器上下文中使用 RouteData 并查看操作名称,我可以使用它来获取数据,但想知道该信息是否已经可用。
此外,如果有问题的操作是异步操作,他们会在查找它时涉及更多处理......
有没有办法在模型绑定阶段获取动作并读取任何属性?
场景是这样的:
我为某种数据类型设置了默认模型绑定器,但取决于它的使用方式(通过操作上的属性控制),我需要忽略一组数据。
我可以在控制器上下文中使用 RouteData 并查看操作名称,我可以使用它来获取数据,但想知道该信息是否已经可用。
此外,如果有问题的操作是异步操作,他们会在查找它时涉及更多处理......
您可以遍历堆栈跟踪并找到返回 ActionResult 的第一个方法并提取属性:
StackTrace st = new StackTrace();
for (int i = 0; i < st.FrameCount; i++)
{
StackFrame frame = st.GetFrame(i);
MethodBase mb = frame.GetMethod();
if (mb is MethodInfo)
{
MethodInfo mi = (MethodInfo)mb;
if (typeof(ActionResult).IsAssignableFrom(mi.ReturnType))
{
object[] methodAttributes = mb.GetCustomAttributes(true);
object[] objectAttributes = mb.DeclaringType.GetCustomAttributes(true);
}
}
}
这只有在调用操作之后调用 UpdateModel 才有效,而不是在到达操作方法之前绑定模型时调用。