2016-08-06 7 views
0

Ich habe eine Basis AsyncControllerInheritance of Action in AsyncController

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

Wie es richtig ist, Vererbung und außer Kraft setzen Somemethod?

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

OR

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

P.S. Sorry für mein Englisch

+0

Ihre beiden Controller sind nicht verwandt. Nimmt "UserController" an, dass er von "BaseController" erbt? – Nkosi

+0

ja, 'UserController' ist geerbt von' BaseController' –

+0

Welche Version von MVC werden Sie verwenden. 'AsyncController' wurde aus Gründen der Abwärtskompatibilität mit ASP.NET MVC3 bereitgestellt. Ansonsten können Sie einfach' Controller' verwenden, zB: 'public class BaseController: Controller'. – Nkosi

Antwort

0

SomeMethod() innerhalb Ihrer BaseController Klasse definiert ist. Daher sollten untergeordnete Klassen von BaseController anstelle von AsyncController erben. Um die Methode zu überschreiben, fügen Sie einfach das Schlüsselwort virtual in die Definition ein.

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

Vererbung und außer Kraft setzen

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

Auch ich habe etwas Merkwürdiges in Ihrem Authorize Attribute bemerkt. Wenn die Basismethode nur für "Admin" zulässig ist und die untergeordnete Methode nur für Benutzer zulässig ist, ist es höchstwahrscheinlich nicht möglich, die Basismethode von der untergeordneten Klasse auszuführen.