我正在 ASP.NET Core (RC2) 中开发一个 Tag Helper,在渲染 Tag Helper 时,我需要访问 Request 对象,因为我需要弄清楚请求的 URL 是什么。
看来在 ASP.NET Core 中访问 Request 对象的正确方法是来自 HttpContext
,并获得HttpContext
我需要注入(inject)IHttpContextAccessor
进入我的标签助手。
所以我尝试了,但在运行时抛出以下异常:
InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' while attempting to activate 'Auth0.AspNetCore.Mvc.TagHelpers.LockTagHelper'.
有什么原因我无法注入(inject)IHttpContextAccessor
进入我的标签助手?
此外,是否还有另一种方法可以访问标记帮助程序内的 Request 对象?
编辑
问题似乎是,从最新的候选版本开始,您必须手动配置 DI 来处理 IHttpContextAccessor。所以在 ConfigureServices
你必须调用
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
我相信在早期的测试版中这是自动配置的......
问题是这是一个库,我不希望用户在他们的应用程序中配置它以使我的库正常工作,因此任何其他更可靠的方法来访问 Request 对象仍然会受到赞赏:)
最佳答案
根据 Pranav 的 response关于 GitHub 上 aspnet/mvc 上同一主题的问题 #4744:
您可以将用 ViewContextAttribute
修饰的 ViewContext
类型的属性添加到标记助手中。这将被初始化为执行页面的 ViewContext
:
[ViewContext]
public ViewContext ViewContext { get; set; }
private HttpRequest Request => ViewContext.HttpContext.Request;
关于asp.net - 如何从 Tag Helper 访问 Request 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37437817/