【发布时间】:2016-09-23 02:21:15
【问题描述】:
我正在 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 对象的方法仍然会受到赞赏:)
【问题讨论】:
-
这里回答了同样的问题stackoverflow.com/questions/37371264/…
-
@JoeAudette 谢谢我也刚刚注意到这一点。我编辑了我的问题以说明这不是一个更可取的解决方案,因为我现在希望我的用户连接 DI 只是为了使用我的标签助手。仍然想看看是否有另一种更可靠的方式来访问 Request 对象而不期望用户连接起来
-
你的问题是 rc1,但是 afaik 这在 rc1 中是不需要的,它在 rc2 中改变了,我同意这是一个常用的东西,他们应该保持默认注册
-
啊。是的,它是 RC2。会更新
标签: asp.net asp.net-core tag-helpers