我是相当新的 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
。
视图组件中的ViewComponent.Url
。
所以机会是,你可以访问this.Url
得到一个 URL 助手。
如果您发现自己处于不存在的情况下,例如在实现自己的服务时,则可以始终将IUrlHelperFactory
与IActionContextAccessor
一起注入,以首先检索当前操作上下文,然后为其创建 URL 帮助程序。
至于ActionContext
是什么,它基本上是一个包含各种值的对象,这些值标识正在处理当前请求的当前 MVC 操作上下文。因此,它包含有关实际请求,已解析的控制器和操作或有关绑定模型对象的模型状态的信息。它基本上是HttpContext
的扩展,还包含特定于 MVC 的信息。
如果您运行的是 ASP.NET Core 2.2 或更高版本,则还可以在服务中使用LinkGenerator
而不是IUrlHelper
,这与必须通过IUrlHelperFactory
构造帮助程序相比,为您提供了一种更简单的生成 URL 的方法。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(46条)