ASP.NET 核心 UrlHelper 及其工作原理
ASP.NET Core UrlHelper and how it works
我是 ASP.NET Core 的新手,现在我正试图了解 UrlHelper 的一般工作原理。
在我的控制器中,我想为同一控制器中的另一个动作创建一个绝对 URL,例如http://localhost:PORT/api/controller/action
。现在的问题是,我该怎么做?
我试过以下方法:
var urlHelper = new UrlHelper(new ActionContext());
var url = urlHelper.Action("ACTION", "CONTROLLER");
此外,像ActionContext
这样的不同语境是什么?
你真的不应该自己创建 UrlHelper
。很可能无论您当前处于何种环境,都已经有一个可用的 IUrlHelper
实例:
ControllerBase.Url
控制器内部。
PageModel.Url
在 Razor 视图中。
ViewComponent.Url
在视图组件中。
很有可能,您只需访问 this.Url
即可获得 URL 助手。
如果你发现自己处于不存在的情况下,例如在实现自己的服务时,那么你总是可以注入一个 IUrlHelperFactory
together with the IActionContextAccessor
来首先检索当前的操作上下文,然后创建一个 URL 帮手。
至于那个 ActionContext
is, it is basically an object that contains various values that identify the current MVC action context in which the current request is being handled. So it contains information about the actual request, the resolved controller and action, or the model state about the bound model object. It is basically an extension to the HttpContext
,也包含 MVC 特定的信息。
如果您是 运行 ASP.NET Core 2.2 或更高版本,您还可以在服务中使用 LinkGenerator
而不是 IUrlHelper
,这为您提供了更简单的方法与必须通过 IUrlHelperFactory
.
构建助手相比,生成 URLs
我是 ASP.NET Core 的新手,现在我正试图了解 UrlHelper 的一般工作原理。
在我的控制器中,我想为同一控制器中的另一个动作创建一个绝对 URL,例如http://localhost:PORT/api/controller/action
。现在的问题是,我该怎么做?
我试过以下方法:
var urlHelper = new UrlHelper(new ActionContext());
var url = urlHelper.Action("ACTION", "CONTROLLER");
此外,像ActionContext
这样的不同语境是什么?
你真的不应该自己创建 UrlHelper
。很可能无论您当前处于何种环境,都已经有一个可用的 IUrlHelper
实例:
ControllerBase.Url
控制器内部。PageModel.Url
在 Razor 视图中。ViewComponent.Url
在视图组件中。
很有可能,您只需访问 this.Url
即可获得 URL 助手。
如果你发现自己处于不存在的情况下,例如在实现自己的服务时,那么你总是可以注入一个 IUrlHelperFactory
together with the IActionContextAccessor
来首先检索当前的操作上下文,然后创建一个 URL 帮手。
至于那个 ActionContext
is, it is basically an object that contains various values that identify the current MVC action context in which the current request is being handled. So it contains information about the actual request, the resolved controller and action, or the model state about the bound model object. It is basically an extension to the HttpContext
,也包含 MVC 特定的信息。
如果您是 运行 ASP.NET Core 2.2 或更高版本,您还可以在服务中使用 LinkGenerator
而不是 IUrlHelper
,这为您提供了更简单的方法与必须通过 IUrlHelperFactory
.