ASP.NET Core MVC重写OnActionExecuting时访问修饰符错误排查
ASP.NET Core MVC基类重写方法报错的解决方法
你出错的原因很直接:C#规定重写父类方法时,不能缩小方法的访问权限范围。你基类里写的protected override void OnActionExecuting用了protected修饰符,但ASP.NET Core的Controller类中,OnActionExecuting方法原本是public的,把访问权限从public改成protected属于缩小范围,所以编译器报错。
修正方法很简单,把修饰符改成和父类一致的public就行:
public class BaseController : Controller { public override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); } }
如果你的需求是只想让子类内部访问自定义逻辑、不想对外暴露,可以额外封装一个protected的方法,在重写的public方法里调用它:
public class BaseController : Controller { public override void OnActionExecuting(ActionExecutingContext filterContext) { // 调用自定义的内部逻辑 HandleActionExecuting(filterContext); // 必须调用父类的方法保证原有逻辑执行 base.OnActionExecuting(filterContext); } protected void HandleActionExecuting(ActionExecutingContext filterContext) { // 这里写你自己的业务逻辑 } }
内容的提问来源于stack exchange,提问作者MTplus
相关产品推荐
相关产品推荐

