asp.net - 如何从 Tag Helper 访问 Request 对象

标签 asp.net asp.net-core tag-helpers

我正在 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/

相关文章:

c# - Guid 应包含 32 位数字和 4 个破折号

entity-framework - net core odata put和patch嵌套数据结构

c# - HtmlTargetElement 属性中的 Attributes 属性有何用途

c# - 如何在 asp.net core 2.1 中使用自定义消息设置状态码?

c# - 使用 ViewBag 中的列表选择 TagHelper

asp.net-core - ASP.NET Core 标记帮助器,用于有条件地将类添加到元素

c# - Node.Js + Socket.IO vs SignalR vs C# WebSocket 服务器

ASP.net 用户数据在访问对象的用户之间交叉

c# - 如何使用 C# 在 asp.net 中设置下拉列表值

c# - 如何在 Mediatr 中为所有请求定义一个特定的异常处理程序