0

我有一个基础 AsyncController

BaseController : AsyncController
{ 
    [Authorize("Admin")]
    public virtual async Task<ActionResult> SomeMethod()
    {
        //code
    }
}

继承和覆盖SomeMethod如何正确?

UserController : BaseController
{ 
    [Authorize("User")]
    public override Task<ActionResult> SomeMethod()
    {
        return base.SomeMethod()
    }
}

或者

UserController : BaseController
{ 
    [Authorize("User")]
    public override async Task<ActionResult> SomeMethod()
    {
        return await base.SomeMethod()
    }
}

PS对不起我的英语

4

1 回答 1

0

SomeMethod()在您的BaseController班级中定义。因此子类应该继承自BaseController而不是AsyncController. 要覆盖该方法,只需virtual在定义中添加关键字。

BaseController : AsyncController
{ 
    [Authorize("Admin")]
    public virtual async Task<ActionResult> SomeMethod()
    {
        //code
    }
}

继承和覆盖

UserController : BaseController
{ 
    [Authorize("User")]
    public override Task<ActionResult> SomeMethod()
    {
        return base.SomeMethod()
    }
}

我也注意到你的Authorize属性有些奇怪。如果基本方法只允许管理员使用,而子方法只允许用户使用,那么您很可能最终无法从子类执行基本方法。

于 2016-08-07T14:53:18.930 回答