gpt4 book ai didi

c# - .Net Core 2.0 中不能覆盖 OnActionExecuted 方法

转载 作者:行者123 更新时间:2023-11-30 15:56:14 27 4
gpt4 key购买 nike

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

基础 Controller (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);
}
}

我现在正在为自己构建一个 Core 2.0 web 模板,并试图在 Core 2.0 中实现基本 Controller ,但该方法出错了。

BaseController(MVC 6, .Net core 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);
}

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

'BaseController.OnActionExecuted(ActionExecutedContext)': cannot change access modifiers when overriding 'public' inherited member

这在 MVC 5 中工作得很好,现在使用 MVC 6 和 .Net Core 2,这是失败的。知道为什么在这种情况下无法保护或私有(private)此方法吗?我不明白为什么它需要公开。

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

最佳答案

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

public virtual void OnActionExecuted(ActionExecutedContext context);

你也可以在官方源代码中看到这个here .

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

关于c# - .Net Core 2.0 中不能覆盖 OnActionExecuted 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47224047/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com