ASP.NET Core UrlHelper及其工作方式

Fre*_*rik 7 c# api urlhelper asp.net-core

我对ASP.NET Core相当陌生,现在我正试图了解UrlHelper的总体工作方式。

在我的控制器中,我想为同一控制器中的另一个动作创建一个绝对URL,例如http://localhost:PORT/api/controller/action。现在的问题是,我该怎么办?

我尝试了以下方法:

var urlHelper = new UrlHelper(new ActionContext());
var url = urlHelper.Action("ACTION", "CONTROLLER");
Run Code Online (Sandbox Code Playgroud)

此外,这些不同的上下文是ActionContext什么样的?

pok*_*oke 19

您真的不应该创造UrlHelper自己。无论您当前处于什么上下文中,都有可能已经有一个IUrlHelper实例:

因此,您可以访问this.Url以获取URL助手。

如果您发现自己不存在这种情况,例如在实现自己的服务时,则可以始终与IUrlHelperFactory一起注入,IActionContextAccessor以首先获取当前操作上下文,然后为其创建URL帮助器。

至于什么,ActionContext基本上是一个对象,它包含各种值,这些值标识在其中处理当前请求的当前MVC操作上下文。因此,它包含有关实际请求,已解析的控制器和操作或有关绑定模型对象的模型状态的信息。它基本上是的扩展HttpContext,还包含MVC特定的信息。


如果您运行的是ASP.NET Core 2.2或更高版本,则也可以在服务内部使用,LinkGenerator而不是IUrlHelper内部,这与通过构造助手相比,提供了一种更简单的生成URL的方法IUrlHelperFactory