C# 无法在.NetCore 2.0中重写OnActionExecuted方法
在我过去用来测试各种项目的测试应用程序中,我有一个基本控制器 基本控制器(MVC5) 我现在正在为自己构建一个Core2.0Web模板,并试图在Core2.0中实现基本控制器,但方法出错 BaseController(MVC 6、.Net核心2.0) 错误消息与被保护的方法有关 'BaseController.OnActionExecuted(ActionExecutedContext)':重写'public'继承成员时无法更改访问修饰符 这在MVC5中运行得非常好,现在使用的是MVC6和.NETCore2,这是失败的。你知道为什么这个方法在这个场景中不能被保护或私有吗?我不明白为什么它需要公开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
另外,现在我正在重新查看这段代码,这是在每次调用控制器操作时检索用户,不是吗?必须有更好的方法在用户首次登录时存储此信息。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);