[英]OnActionExecuted method cant be overriden in .NetCore 2.0
在我過去用過測試各種項目的測試應用程序中,我有一個基本控制器。
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);
}
}
我現在正在為自己構建一個Core 2.0 Web模板,並且正在嘗試在Core 2.0中實現基本控制器,但該方法錯誤。
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)':覆蓋'public'繼承成員時無法更改訪問修飾符
這在MVC 5中運行得非常好,現在使用MVC 6和.Net Core 2,這是失敗的。 知道為什么在這種情況下這種方法不能被保護或私有嗎? 我不明白為什么需要公開。
此外,現在我正在重新查看此代碼,這是每次調用控制器操作時檢索用戶,不是嗎? 在用戶第一次登錄時,必須有更好的方法來存儲此信息.SqlDistributedCache?
基本Controller
類中方法的訪問修飾符是public
而不是protected
:
public virtual void OnActionExecuted(ActionExecutedContext context);
您也可以在官方源代碼中看到這一點 。
編譯器錯誤告訴您無法在繼承的類中更改它。 所以你只需要改變你的匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.