【问题标题】:How do I access the Request object from a Tag Helper如何从 Tag Helper 访问 Request 对象
【发布时间】: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


【解决方案1】:

根据 Pranav 的 response 关于 GitHub 上 aspnet/mvc 上同一主题的问题 #4744:

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

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

private HttpRequest Request => ViewContext.HttpContext.Request;

【讨论】:

  • 另外,最好同时设置[ViewContext, HtmlAttributeNotBound] 属性。 [HtmlAttributeNotBound] 将使您能够选择退出 TagHelper 绑定(我们不想通过视图中的标签助手属性设置此属性)。
猜你喜欢
  • 2015-12-08
  • 1970-01-01
  • 2016-02-28
  • 2016-03-18
  • 2020-06-17
  • 1970-01-01
  • 2011-02-26
  • 2014-07-20
  • 1970-01-01
相关资源
最近更新 更多