2017-01-26 3 views
4

Gibt es eine Möglichkeit zu überprüfen, ob der Controller, der eine Methode aufgerufen hat, von einem Controller kommt, der sich in einem Bereich befindet?Erarbeiten, ob Controller in einem Bereich ist

Zum Beispiel habe ich eine Klasse, die von AuthorizeAttribute erbt, z.

public class CustomAuthorize: System.Web.Mvc.AuthorizeAttribute 
{ 
    public CustomAuthorize() 
    {    
     ... 
    } 

    protected override bool AuthorizeCore(HttpContextBase httpContext)   
    {       
     // TODO - Check if the controller is from an Area 
    } 
} 

Ich habe dann einige Controller-Aktionen, die mit relevanten Rollen (sowie einige andere benutzerdefinierte Attribute) z.

[CustomAuthorize(Roles ="Administrator")] 
[HttpGet] 
public virtual ActionResult Index() 
{    
    ... 
} 

Im TODO Abschnitt oben würde Ich mag, um zu sehen, ob der Controller einer des Controller von einem meines Bereich ist. Ich weiß, dass meine Controller, die sich in einem Bereich befinden, sich im Namespace ProjectName.Areas.xxx.Controllers befinden (wobei xxx für den Gebietsnamen steht), während diejenigen, die nicht vorhanden sind, sich im Namespace ProjectName.Controllers befinden.

Gibt es eine Möglichkeit (mit Reflektion vielleicht?), Dass ich aus der AuthorizeCore-Funktion über das kann ich den bestimmten Bereich (oder Namespace, aus dem es stammt), so dass ich einige benutzerdefinierte Funktionalität implementieren kann?

Antwort

2

können Sie es aus den RouteData.DataTokens:

httpContext.Request.RequestContext.RouteData.DataTokens["area"] 

dass null zurück, wenn der Controller nicht in einem Gebiet oder den Namen des Bereichs ist, wenn Ihr Controller in einem Bereich ist.

+0

Ausgezeichnet, danke. – ca8msm

+0

Kein Problem @ ca8msm - froh, dass ich helfen konnte. – petelids

0

Ich bin nicht vertraut mit MCV Bereich Konzept, aber ich habe diesen Link von einer Google-Suche gefunden. Vielleicht kann es dir helfen.

ASP.NET MVC - Get Current Area Name in View or Controller

+1

Das ist ein Link zu diesem Beitrag! – ca8msm

+0

Entschuldigung, ich habe den falschen Link kopiert. Hier ist der, auf den ich mich bezog. http://stackoverflow.com/questions/2723689/asp-net-mvc-get-current-area-name-in-view-or-controller – sreyaNotfilc

+0

Haha ok danke! – ca8msm

Verwandte Themen