在模型绑定阶段,有没有一种方法可以获取操作并读取任何属性?
场景是这样的:
我已经为某个数据类型设置了一个默认的模型绑定器,但是根据它的使用方式(通过操作的属性控制),我需要忽略一组数据。
我可以在控制器上下文中使用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,而不是在到达action方法之前绑定模型时,这才有效。