如何从标签助手访问请求对象

4 asp.net tag-helpers asp.net-core

我正在ASP.NET Core(RC2)中开发标记帮助器,渲染标记帮助器时,我需要访问Request对象,因为我需要弄清楚请求的URL是什么。

因此,似乎在ASP.NET Core中访问Request对象的正确方法是从HttpContext,并获取HttpContextI,我需要将其注入IHttpContextAccessor到Tag Helper中。

所以我尝试了一下,但是在运行时抛出了以下异常:

InvalidOperationException:尝试激活“ Auth0.AspNetCore.Mvc.TagHelpers.LockTagHelper”时,无法解析类型为“ Microsoft.AspNetCore.Http.IHttpContextAccessor”的服务。

有什么原因我不能注入IHttpContextAccessor我的标签助手?

另外,也许还有另一种方法可以访问Tag Helper中的Request对象?

编辑

似乎问题在于,自最新的候选发布版以来,您必须手动配置DI才能处理IHttpContextAccessor。因此,ConfigureServices您必须致电

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

我相信在早期的Beta中,它是自动配置的...

问题是这是一个库,我不希望用户在其应用程序中配置该库以使我的库正常工作,因此仍然可以使用任何其他更可靠的方式来访问Request对象:)

小智 5

根据Pranav 有关GitHub上aspnet / mvc上同一主题的问题#4744 的答复

您可以将类型为ViewContext装饰的属性添加ViewContextAttribute到标签帮助器。这将被初始化为ViewContext执行页面的:

[ViewContext]
public ViewContext ViewContext { get; set; }

private HttpRequest Request => ViewContext.HttpContext.Request;
Run Code Online (Sandbox Code Playgroud)

  • 此外,最好同时设置`[ViewContext, HtmlAttributeNotBound]` 属性。`[HtmlAttributeNotBound]` 将使您能够选择退出 TagHelper 绑定(我们不想通过视图中的标签助手属性设置此属性)。 (2认同)