ASP.NET Core MVC中的自定义相对路径

3

有没有可能拥有一个自定义的相对路径,就像下面的例子一样:

在Razor中:

<script src="%/scripts/theme.js" type="text/javascript"></script>

并且结果:

<script src="/themes/default/scripts/theme.js" type="text/javascript"></script>

定义新的PATH风格,类似于%/*/$/

注意:我知道关于~/(默认相对路径)。我想知道如何定义一个新的PATH风格?


你能试试这个吗?<script type="text/javascript" src='@Url.Content("~/scripts/theme.js")'></script> - hasan
不行。请仔细看我刚才说的话。我说了“自定义”,这不是自定义。要定义一个新的。当然,我知道关于~/.的事情,所以我可以定义与%/、^/或*/相同的内容。 - Omid Mafakher
:D @hasan 谢谢你。你没有理解我。 - Omid Mafakher
2个回答

2
最终我找到了解决方案。请查看微软在以下链接中如何实现它: https://github.com/aspnet/Mvc/blob/1c4b0fcdf38320b2f02c0bb7c31df5bd391ace07/src/Microsoft.AspNetCore.Mvc.Razor/TagHelpers/UrlResolutionTagHelper.cs#L47 我拷贝了这个类并将其重命名为这个:
[HtmlTargetElement("link", Attributes = "[href^='%/']", TagStructure = TagStructure.WithoutEndTag)]
[HtmlTargetElement("script", Attributes = "[src^='%/']")]
....
public class ThemeUrlResolutionTagHelper : TagHelper
{
   /*Implement tag helper here*/
}

在创建修剪字符串之前,我会插入我的主题URL。
url = url.Remove(start, 2).Insert(start, $"~/themes/{Theme.Key}/");
var trimmedUrl = CreateTrimmedString(url, start);

我在FindRelativeStart方法中将~更改为%,如下:

// Before doing more work, ensure that the URL we're looking at is app-relative.
if (url[start] != '%' || url[start + 1] != '/')
{
    return -1;
}

完成了!

1
你需要使用波浪号~。路径中没有百分号%运算符:
 <script src="~/scripts/theme.js" type="text/javascript"></script>

1
请再看一下示例。我说的是自定义路径。~/ 它会返回您的wwwroot,但我想要一个自定义的路径。% 这只是一个示例,用于创建一个新的自定义路径。我想指向特定的路径。 - Omid Mafakher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接