Получение действия во время привязки модели - PullRequest
1 голос
/ 13 августа 2010

Есть ли способ получить действие и прочитать какие-либо атрибуты на этапе привязки модели?

Сценарий таков:

У меня есть настройка связывателя модели по умолчанию для определенного типа данных, но в зависимости от того, как он используется (который управляется с помощью атрибута в действии), мне нужно игнорировать набор данных.

Я могу использовать RouteData в контексте контроллера и увидеть имя действия, которое я могу использовать для получения данных, но мне было интересно, доступна ли эта информация.

Кроме того, если рассматриваемое действие является асинхронным, то при его поиске потребовалось бы больше обработки ...

1 Ответ

0 голосов
/ 15 августа 2010

Вы можете пройти трассировку стека и найти первый метод, который возвращает 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 после вызова действия, а не тогда, когда модель связана до достижения метода действия.

...