6

我正在 ASP.NET Core (RC2) 中开发一个 Tag Helper,在呈现 Tag Helper 时,我需要访问 Request 对象,因为我需要弄清楚请求的 URL 是什么。

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

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

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

有什么原因我不能注入IHttpContextAccessor到我的 Tag Helper 中吗?

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

编辑

似乎问题在于,自从最新的候选版本以来,您必须手动配置 DI 来处理 IHttpContextAccessor。所以ConfigureServices你必须打电话给

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

我相信在早期的测试版中这是自动配置的......

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

4

1 回答 1

8

根据 Pranav对问题 #4744的回复,该问题与 GitHub 上 aspnet/mvc 上的同一主题有关:

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

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

private HttpRequest Request => ViewContext.HttpContext.Request;
于 2016-05-25T13:48:18.040 回答