在 TagHelper class 和动态 url 生成上注入 HtmlHelper

Injection of HtmlHelper on a TagHelper class and dynamic url generation

我正在制作一个必须生成 link 列表的 TagHelper(在此示例中,TagHelper 生成单个 link 以明确说明)。 每个 link 都必须根据 API 调用的结果调用控制器、操作并传递参数。

控制器:

public class ContentController : Controller
{
    public async Task<IActionResult> DoSomething(string typeOfContent)
    {
        ...
    }
}

标签助手:

public class ContentTypeTagHelper : TagHelper
{
    public ContentTypeTagHelper(IUrlHelper urlHelper)
    {
        _urlHelper = urlHelper;
    }

    public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = null;
        output.TagMode = TagMode.SelfClosing;

        string contentType = SomeApiCall.GetContentTypes();

        // this is the correct way to do this?
        var url = _urlHelper.Action("DoSomething", "ContentController", new {typeOfContent = contentType});
    }
}

并且在 Startup.cs 中,我包含了以下代码: services.AddSingleton<IHtmlHelper, HtmlHelper>();

如果我尝试 运行 此代码,我会收到错误消息。 InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Mvc.IUrlHelper' while attempting to activate 'Foo.TagHelpers.ContentTypeTagHelper'

IHtmlHelper 与 IUrlHelper 不同。 实际上,您需要注入的是 IUrlHelperFactory 和 IActionContextAccessor,然后您可以使用它们来创建 UrlHelper。

你可以看一个例子here in my PagerTagHelper