ASP.NET Core UrlHelper及其工作方式

时间:2018-09-27 12:24:42

标签: c# api asp.net-core urlhelper

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

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

我尝试了以下方法:

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

此外,ActionContext之类的不同上下文是什么?

1 个答案:

答案 0 :(得分:7)

您真的不应该自己创建UrlHelper。无论您当前处于何种上下文中,都有一个IUrlHelper实例可用:

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

如果您发现自己不存在这种情况(例如在实施自己的服务时),则始终可以将IUrlHelperFactoryIActionContextAccessor一起注入以首先检索当前操作上下文然后为其创建一个URL帮助器。

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


如果您运行的是ASP.NET Core 2.2或更高版本,则还可以在服务内部使用LinkGenerator而不是IUrlHelper,与构造URL相比,它使您更容易生成URL。 IUrlHelperFactory来帮助助手。