9
votes

Désactiver l'apicontroller au moment de l'exécution

J'ai une application ASP.NET Web API (.NET 4) qui a quelques contrôleurs. Nous allons exécuter plusieurs instances de l'application Web API sur IIS avec une différence. Seuls certains contrôleurs seront disponibles sous certaines instances IIS. Ce que je pensais, c'est désactiver / décharger les contrôleurs qui ne s'appliquent pas à une instance lorsque l'instance démarre.

Quelqu'un a eu des informations qui pourraient me guider dans la bonne direction à ce sujet?


2 commentaires

Le routage affecte quels contrôleurs sont "disponibles". Au démarrage de l'application, vous pouvez utiliser routétable.route.maphttproute sur uniquement des itinéraires des collateurs que vous souhaitez exposés par le service. Vous voudriez supprimer le routage par défaut et définir explicitement des itinéraires pour chacun de vos contrôleurs.


Ma solution pour ce problème (Stackoverflow Link): Stackoverflow.com/a/43044667/257470


3 Réponses :


3
votes

Plutôt que de décharger les contrôleurs, je pense que je créerais un attribut d'autorisation personnalisé qui a examiné les informations d'instance dans la décision d'accorder une autorisation.

Vous ajouteriez ce qui suit à chaque contrôleur au niveau de la classe, ou vous pouvez Ajoutez également ceci aux actions de contrôleur individuelles: xxx

Voici le code de l'attribut: xxx


2 commentaires

+1 - Clever, serait bien si vous pouviez le lire sur les paramètres de configuration pour déterminer si le contrôleur est également autorisé.


Comme il y a plusieurs instances de la même application, je recommanderais vivement ceci être configurable dans le fichier web.config. Il n'a aucun sens d'essayer de détecter l'instance ou l'AppPool car les administrateurs ont le contrôle de cela et ils peuvent le changer pour une raison quelconque.



5
votes

Vous pouvez mettre votre propre iHttpcontrolleractivator code> en en décorant la défaulthttapcontrolleractivator. À l'intérieur, recherchez simplement un réglage et créez uniquement le contrôleur si autorisé.

Lorsque vous retournez NULL à partir de la méthode de création, l'utilisateur recevra 404 message non trouvé. P>

Mon exemple affiche une valeur dans les paramètres de l'application ( App.config ou web.config) en cours de vérification mais évidemment, cela pourrait tout autre environnement d'environnement. P>

GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator), new YourCustomControllerActivator());


1 commentaires

Merci pour l'aide de tout le monde à ce sujet. M'a pris un certain temps pour revenir sur ce projet. Grâce à @MarkJONES, votre code a travaillé un charme, j'ai utilisé cela avec une combinaison de mon propre défautSolursResolver pour obtenir les résultats souhaités.



0
votes

Le IHTTPCONTROLLERACTIVATOR ne désactive pas les itinéraires définis à l'aide de routage d'attribut, si vous souhaitez activer / désactiver un contrôleur et avoir une touche par défaut, tout contrôleur d'itinéraire. Désactiver en utilisant IHTTPCONTROLLERACTIVATOR désactive le contrôleur, mais lorsque l'itinéraire est demandé, il ne frappe pas la capture de tous les routiers contrôleur -4 Ça tente simplement de toucher le contrôleur qui a été supprimé et ne renvoie aucun contrôleur enregistré.


0 commentaires