web-dev-qa-db-fra.com

ASP.NET Core UrlHelper et son fonctionnement

Je suis assez nouveau sur ASP.NET Core, et en ce moment j'essaie de comprendre comment fonctionne UrlHelper en général.

Dans mon contrôleur, je veux créer une URL absolue vers une autre action dans le même contrôleur, par exemple http://localhost:PORT/api/controller/action. La question est maintenant, comment faire?

J'ai essayé avec ce qui suit:

var urlHelper = new UrlHelper(new ActionContext());
var url = urlHelper.Action("ACTION", "CONTROLLER");

De plus, quels sont ces différents contextes comme ActionContext?

7
Frederik

Vous ne devriez vraiment pas créer vous-même un UrlHelper. Il est probable que, quel que soit le contexte dans lequel vous vous trouvez actuellement, une instance IUrlHelper est déjà disponible:

Il y a donc de fortes chances que vous puissiez simplement accéder à this.Url pour obtenir un assistant URL.

Si vous vous trouvez dans une situation où cela n'existe pas, par exemple lors de l'implémentation de votre propre service, vous pouvez toujours injecter un IUrlHelperFactory avec le IActionContextAccessor pour récupérer d'abord le contexte d'action actuel, puis créer un assistant URL pour celui-ci.

Quant à ce que c'est ActionContext , il s'agit essentiellement d'un objet qui contient diverses valeurs qui identifient le contexte d'action MVC actuel dans lequel la demande actuelle est traitée. Il contient donc des informations sur la demande réelle, le contrôleur et l'action résolus, ou l'état du modèle sur l'objet de modèle lié. Il s'agit essentiellement d'une extension de HttpContext , contenant également des informations spécifiques à MVC.


Si vous exécutez ASP.NET Core 2.2 ou version ultérieure, vous pouvez également utiliser LinkGenerator au lieu de IUrlHelper dans vos services, ce qui vous permet de générer plus facilement URL par rapport à la construction de l'assistant via IUrlHelperFactory.

4
poke