在我过去用来测试各种项目的测试应用程序中,我有一个基本控制器。
BaseController (MVC5)
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)
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?
发布于 2017-11-10 13:44:32
基类中的方法的访问修饰符是Controller,而不是protected。
public virtual void OnActionExecuted(ActionExecutedContext context);您也可以在官方源代码这里中看到这一点。
编译器错误告诉您不能在继承的类中更改它。所以你只需要改变你的匹配。
https://stackoverflow.com/questions/47224047
复制相似问题