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
?
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:
ControllerBase.Url
à l'intérieur des contrôleurs.PageModel.Url
dans une vue Razor.ViewComponent.Url
à l'intérieur d'un composant de vue.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
.