首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OnActionExecuted方法在.NetCore 2.0中不可超越

OnActionExecuted方法在.NetCore 2.0中不可超越
EN

Stack Overflow用户
提问于 2017-11-10 13:36:22
回答 1查看 2.8K关注 0票数 5

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

BaseController (MVC5)

代码语言:javascript
复制
    public abstract class BaseController : Controller
    {
        protected override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            if (User != null)
            {
                var context = new ApplicationDbContext();
                var username = User.Identity.Name;
                var iconSource = ServicesAppSettings.UserIcons.FemaleUserIconSource;

                if (!string.IsNullOrEmpty(username))
                {
                    var user = context.Users.SingleOrDefault(u => u.UserName == username);
                    if (user != null)
                    {
                        var gender = user.GetUserGender(username);
                        if (gender == DomainClasses.Enums.Gender.Male)
                        {
                            iconSource = ServicesAppSettings.UserIcons.MaleUserIconSource;
                        }
                        var fullName = user.GetFullName(username);
                        ViewData.Add("FullName", fullName);
                        ViewData.Add("IconSource", iconSource);
                    }
                }
            }
            base.OnActionExecuted(filterContext);
        }       
    }

我现在正在为自己构建一个Core2.0 web模板,并试图在Core2.0中实现基本控制器,但是这种方法是错误的。

BaseController(MVC 6,.Net核心2.0)

代码语言:javascript
复制
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”继承成员时,'BaseController.OnActionExecuted(ActionExecutedContext)':不能更改访问修饰符

这在MVC 5中非常好,现在使用MVC 6和.Net Core 2,这是失败的。知道为什么在这个场景中这个方法不能被保护或者私有吗?我不明白为什么要公开。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-10 13:44:32

基类中的方法的访问修饰符是Controller,而不是protected

代码语言:javascript
复制
public virtual void OnActionExecuted(ActionExecutedContext context);

您也可以在官方源代码这里中看到这一点。

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47224047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档