我对ASP.NET核心相当陌生,现在我正试图从总体上掌握UrlHelper的工作原理。
在我的控制器中,我想创建一个指向同一控制器中另一个操作的绝对网址,例如http://localhost:PORT/api/controller/action
。现在的问题是,我该怎么做?
我已经尝试了以下几点:
var urlHelper = new UrlHelper(new ActionContext());
var url = urlHelper.Action("ACTION", "CONTROLLER");
此外,像ActionContext
这样的不同上下文是什么
发布于 2018-09-27 12:38:08
你真的不应该自己创建UrlHelper
。无论您当前所处的上下文是什么,很可能已经有一个IUrlHelper
实例可用:
ControllerBase.Url
视图组件中的controllers.PageModel.Url
view.ViewComponent.Url
中的Razor。所以很有可能,你可以直接访问this.Url
来获取一个URL helper。
如果您发现自己处于不存在的情况下,例如在实现您自己的服务时,那么您可以始终将IUrlHelperFactory
与IActionContextAccessor
一起注入,以首先检索当前操作上下文,然后为其创建一个URL helper。
至于ActionContext
是什么,它基本上是一个包含各种值的对象,这些值标识了当前正在处理的请求所在的当前MVC action上下文。因此,它包含有关实际请求、解析的控制器和操作的信息,或者关于绑定的模型对象的模型状态的信息。它基本上是对HttpContext
的扩展,也包含特定于MVC的信息。
如果您运行的是ASP.NET Core2.2或更高版本,您还可以在服务中使用LinkGenerator
而不是IUrlHelper
,与通过IUrlHelperFactory
构造帮助器相比,这为您提供了一种更容易生成URL的方法。
https://stackoverflow.com/questions/52536969
复制相似问题