如何从ASP调用静态方法.. NET MVC控制器

本文关键字:NET MVC 控制器 静态方法 调用 ASP | 更新日期: 2023-09-27 18:08:42

GetMethod找不到公共静态方法,如果从asp.net MVC控制器调用。(从控制台应用程序,它工作正常)。

采用假SaveEntityGenericWrapper方法求解。

如何从代码中删除SaveEntityGenericWrapper ?

为什么GetMethod("SaveEntityGeneric")返回nullGetMethod("SaveEntityGenericWrapper")工作如果从asp.net MVC 2控制器调用?

如果在MVC2中使用部分信任,如何使SaveEntityGeneric私有?

public class EntityBase() {
    public void SaveEntity(EntityBase original)
    { 
        var method = GetType().GetMethod("SaveEntityGenericWrapper");
        // why this line returns null if called from ASP .NET MVC 2 controller:
        // method = GetType().GetMethod("SaveEntityGeneric");
        var gm = method.MakeGenericMethod(GetType());
        gm.Invoke(this, new object[] { original, this });
    }
    // Dummy wrapper reqired for mvc reflection call only. 
    // How to remove it?
    public List<IList> SaveEntityGenericWrapper<TEntity>(TEntity original, TEntity modified)
        where TEntity : EntityBase, new()
    {
        return SaveEntityGeneric<TEntity>(original, modified);
    }
    public static List<IList> SaveEntityGeneric<TEntity>(TEntity original, TEntity modified)
                where TEntity : EntityBase, new()
    { ... actual work is performed here  }
}

如何从ASP调用静态方法.. NET MVC控制器

您需要在GetMethod调用中指定BindingFlags,以便返回静态方法(我认为默认情况下只返回公共实例方法)

 var method = GetType().GetMethod("SaveEntityGenericWrapper",
                                  BindingFlags.Static|BindingFlags.Public);

干脆不要用private制造问题,勇敢尝试解决更复杂的问题。

看你以前的帖子,多么简单的

至少使用

internal static List<IList> SaveEntityGeneric<TEntity>(TEntity original, TEntity modified)
                where TEntity : EntityBase, new()
{
    ... 
}