Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法在.NetCore 2.0中重写OnActionExecuted方法_C#_Asp.net Mvc - Fatal编程技术网

C# 无法在.NetCore 2.0中重写OnActionExecuted方法

C# 无法在.NetCore 2.0中重写OnActionExecuted方法,c#,asp.net-mvc,C#,Asp.net Mvc,在我过去用来测试各种项目的测试应用程序中,我有一个基本控制器 基本控制器(MVC5) 我现在正在为自己构建一个Core2.0Web模板,并试图在Core2.0中实现基本控制器,但方法出错 BaseController(MVC 6、.Net核心2.0) 错误消息与被保护的方法有关 'BaseController.OnActionExecuted(ActionExecutedContext)':重写'public'继承成员时无法更改访问修饰符 这在MVC5中运行得非常好,现在使用的是MVC6和.NE

在我过去用来测试各种项目的测试应用程序中,我有一个基本控制器

基本控制器(MVC5)

我现在正在为自己构建一个Core2.0Web模板,并试图在Core2.0中实现基本控制器,但方法出错

BaseController(MVC 6、.Net核心2.0)

错误消息与被保护的方法有关

'BaseController.OnActionExecuted(ActionExecutedContext)':重写'public'继承成员时无法更改访问修饰符

这在MVC5中运行得非常好,现在使用的是MVC6和.NETCore2,这是失败的。你知道为什么这个方法在这个场景中不能被保护或私有吗?我不明白为什么它需要公开


另外,现在我正在重新查看这段代码,这是在每次调用控制器操作时检索用户,不是吗?必须有更好的方法在用户首次登录时存储此信息。SqlDistributedCache?

基本
控制器
类中方法的访问修饰符是
公共
而不是
受保护的

public virtual void OnActionExecuted(ActionExecutedContext context);
您也可以在官方源代码中看到这一点


编译器错误告诉您不能在继承的类中更改它。所以你只需要改变你的来匹配。

@DavidG…谢谢,我明白了,我的问题是为什么会改变?在MVC5中,我能够使该方法受到保护。要想知道原因,您必须询问Microsoft。代码历史记录显示,自从第一次提交以来一直是这样。哈哈……真的吗
protected override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (User != null)
        {
            var baseArgs = new[] { "TestApp" };
            var context = ApplicationDbContextFactory.CreateDbContext(baseArgs);
            var username = User.Identity.Name;
            var iconSource = _config.GetSection("FemaleUserIcon");

            if (!string.IsNullOrEmpty(username))
            {
                var user = context.Users.SingleOrDefault(u => u.UserName == username);
                if (user != null)
                {
                    var gender = user.GetUserGender(username);
                    if (gender == Gender.Male)
                    {
                        iconSource = _config.GetSection("MaleUserIcon");
                    }
                    var fullName = user.GetFullName(username);
                    ViewData.Add("FullName", fullName);
                    ViewData.Add("IconSource", iconSource);
                }
            }
        }
        base.OnActionExecuted(filterContext);
    }
public virtual void OnActionExecuted(ActionExecutedContext context);