L'appel d'une autre API Web contrôleur directement à partir de l'intérieur d'une autre API Web du contrôleur
Donné un contrôleur de Proxy
et une action de GetInformation
. Je veux être en mesure d'appeler la méthode GetInformation
de la Users
contrôleur. À la fois la WebAPI les contrôleurs sont dans le même projet, mais des appels directs comme
var controller = new UsersController();
return controller.GetInformation(request);
Ne fonctionne pas.
La signature est:
public HttpResponseMessage GetInformation(InformationRequest request)
Je ne veux pas faire une réponse de redirection comme je ne veux pas le UserController route exposés à l'extérieur. Cela doit être un interne uniquement appel.
- Pourquoi l'appel direct ne fonctionne pas? Êtes-vous une erreur? Si il se sent comme il serait mieux si vous aviez une couche intérieure que vous pourriez appeler au lieu d'appeler un autre contrôleur..
- Au lieu d'appeler le contrôleur, vous pouvez utiliser RedirectToRoute (ou) déplacer la fonctionnalité de GetInformation à un service et d'appeler ce service.
- RedirectToRoute retourne un ActionResponse et expose la redirection vers le client. Ce n'est pas ok (et aussi dans la question de l'énoncé).
- Il lève une exception de type référence nulle dans la construction de la HttpResponseMessage peu importe ce que les HttpResponseMessage est. J'ai posté le contourner dans ma réponse ci-dessous, il manquait certains éléments dans la construction de la méthode de contrôleur. Apparemment elles sont injectés par WebAPI (MVC) moteur, sans eux HttpResponses ne peut pas être généré.
Vous devez vous connecter pour publier un commentaire.
Pour ceux qui veulent résoudre cette API à la méthode de l'API dans les différents contrôleurs, nous avons trouvé une solution qui fonctionne. La première tentative a été de près, manque juste un peu de choses.
Ce faisant, il permet la construction de la cible de contrôleur et de l'invocation directe de la méthode souhaitée. La plus grande complexité est ici l'Uri de réglage.
Vous devriez faire quelque chose comme ceci dans votre UsersController
et de votre ProxyController vous pouvez resuse que "UserBusinessLogic" méthode pour obtenir la même information en utilisant le même extrait de code.
Une autre façon peut être:
sans l'aide de la IHttpActionResult type de retour. Votre méthode restera toujours une méthode Http GET et ensuite l'appeler de la même manière que vous appelez une méthode de classe.