我对ASP.NET Core相当陌生,现在我正试图了解UrlHelper的总体工作原理。
在我的控制器中,我想为同一控制器中的另一个操作创建一个绝对URL,例如http://localhost:PORT/api/controller/action
。现在的问题是,我该怎么办?
我尝试了以下方法:
var urlHelper = new UrlHelper(new ActionContext());
var url = urlHelper.Action("ACTION", "CONTROLLER");
此外,ActionContext
之类的不同上下文是什么?
答案 0 :(得分:7)
您真的不应该自己创建UrlHelper
。无论您当前处于何种上下文中,都有一个IUrlHelper
实例可用:
ControllerBase.Url
在控制器内部。PageModel.Url
在Razor视图中。ViewComponent.Url
在视图组件中。因此,您可以访问this.Url
以获得URL助手。
如果您发现自己不存在这种情况(例如在实施自己的服务时),则始终可以将IUrlHelperFactory
与IActionContextAccessor
一起注入以首先检索当前操作上下文然后为其创建一个URL帮助器。
关于ActionContext
是什么,基本上它是一个对象,它包含各种值,这些值标识在其中处理当前请求的当前MVC操作上下文。因此,它包含有关实际请求,已解析的控制器和操作或有关绑定模型对象的模型状态的信息。它基本上是HttpContext
的扩展,还包含特定于MVC的信息。
如果您运行的是ASP.NET Core 2.2或更高版本,则还可以在服务内部使用LinkGenerator
而不是IUrlHelper
,与构造URL相比,它使您更容易生成URL。 IUrlHelperFactory
来帮助助手。