gpt4 book ai didi

c# - AspNetCore 在 TagHelper 中获取 wwwroot 的路径

转载 作者:太空狗 更新时间:2023-10-29 22:25:37 27 4
gpt4 key购买 nike

我尝试创建一个 TagHelper 来检查图像是否存在,如果不存在则替换默认图像的路径。

不幸的是,我在标记助手中映射“~”符号时遇到问题。

例如。我的图像 src 包含“~\images\image1.png”。现在我想检查这个文件是否存在,如果不存在,则用标签属性中的另一个文件替换它。我坚持将“~”映射到我的应用程序的 wwwroot。

这是我实际拥有的:

[HtmlTargetElement("img", TagStructure = TagStructure.WithoutEndTag)]
public class ImageTagHelper : TagHelper
{
public ImageTagHelper(IHostingEnvironment environment)
{
this._env = environment;
}

private IHostingEnvironment _env;

public string DefaultImageSrc { get; set; }

public override void Process(TagHelperContext context, TagHelperOutput output)
{
// urlHelper.ActionContext.HttpContext.
//var env = ViewContext.HttpContext.ApplicationServices.GetService(typeof(IHostingEnvironment)) as IHostingEnvironment;

string imgPath = context.AllAttributes["src"].Value.ToString();

if (!File.Exists(_env.WebRootPath + imgPath)) {
output.Attributes.SetAttribute("src", _env.WebRootPath + DefaultImageSrc);
}
}

}

最佳答案

您应该在 IUrlHelperFactor 和 IActionContextAccessor 上使用构造函数依赖项,这将使您能够获得一个 IUrlHelper,它可以使用“~/”语法从 wwwroot 解析 url

public ImageTagHelper(
IUrlHelperFactory urlHelperFactory,
IActionContextAccessor actionContextAccesor,)
{
this.urlHelperFactory = urlHelperFactory;
this.actionContextAccesor = actionContextAccesor;
}

private IUrlHelperFactory urlHelperFactory;
private IActionContextAccessor actionContextAccesor;

public override void Process(TagHelperContext context, TagHelperOutput output)
{
var urlHelper = urlHelperFactory.GetUrlHelper(actionContextAccesor.ActionContext);
var myUrl = urlHelper.Content("~/somefilebelowwwwroot");
...
}

你可以在我的 PagerTagHelper 中看到我正在这样做

关于c# - AspNetCore 在 TagHelper 中获取 wwwroot 的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40001242/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com