Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET核心UrlHelper及其工作原理_C#_Api_Asp.net Core_Urlhelper - Fatal编程技术网

C# ASP.NET核心UrlHelper及其工作原理

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");

我对ASP.NETCore相当陌生,现在我正试图了解UrlHelper的总体工作原理

在我的控制器中,我想创建一个指向同一控制器中另一个操作的绝对URL,例如
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=“~/”{…}