C# ASP.NET核心UrlHelper及其工作原理
我对ASP.NETCore相当陌生,现在我正试图了解UrlHelper的总体工作原理 在我的控制器中,我想创建一个指向同一控制器中另一个操作的绝对URL,例如C# ASP.NET核心UrlHelper及其工作原理,c#,api,asp.net-core,urlhelper,C#,Api,Asp.net Core,Urlhelper,我对ASP.NETCore相当陌生,现在我正试图了解UrlHelper的总体工作原理 在我的控制器中,我想创建一个指向同一控制器中另一个操作的绝对URL,例如http://localhost:PORT/api/controller/action。现在的问题是,我该怎么做 我尝试了以下方法: var urlHelper = new UrlHelper(new ActionContext()); var url = urlHelper.Action("ACTION", "CONTROLLER");
http://localhost:PORT/api/controller/action
。现在的问题是,我该怎么做
我尝试了以下方法:
var urlHelper = new UrlHelper(new ActionContext());
var url = urlHelper.Action("ACTION", "CONTROLLER");
此外,像
ActionContext
这样的不同上下文是什么?你真的不应该自己创建UrlHelper
。无论您当前处于何种环境中,都可能已有一个可用实例:
- 控制器内部
- 在一个剃刀的视野里
- 在视图组件内部
this.Url
即可获得Url帮助程序
如果您发现自己处于一种不存在这种情况的情况下,例如在实现您自己的服务时,那么您总是可以将注入与一起,以首先检索当前操作上下文,然后为其创建URL帮助器
至于它是什么,它基本上是一个包含各种值的对象,这些值标识当前处理请求的当前MVC操作上下文。因此,它包含关于实际请求、已解析的控制器和操作的信息,或者关于绑定模型对象的模型状态的信息。它基本上是对的扩展,也包含MVC特定的信息
如果您运行的是ASP.NET Core 2.2或更高版本,您还可以在服务中使用而不是
IUrlHelper
,这与必须在Startup.ConfigureServices中通过IUrlHelperFactory
构建帮助程序相比,为您提供了一种更容易生成URL的方法。我需要设置服务的LoginPath选项。configureapplicationokie。。。所以我不在任何页面或视图中。。在这种情况下,UrlHelper不可用,而LinkGenerator是一个抽象类。使用硬编码字符串似乎在大多数情况下都有效,但并非适用于所有环境。看起来我们必须为此添加配置?@LouisSomers您可以为此使用基于DI的配置:服务。添加选项(IdentityConstants.ApplicationScheme)。配置((选项,生成器)=>{options.LoginPath=generator.GetPathByAction(…);})
–如果您无法使其正常工作,请随意创建一个新问题并在此处链接。谢谢,我尝试过注入,但现在得到了异常System.InvalidOperationException:“在尝试激活“MyApp.Startup”时,无法解析类型为“Microsoft.AspNetCore.Routing.LinkGenerator”的服务。”。也许您可以添加一个答案,因为app.UsePathBase()
似乎不是完整答案(它不会自动更改硬编码的“~/…”
路径)。关于静态值或默认值,如public IActionResult Login(string returnUrl=“~/”{…}