Asp.Net核心MVC中的自定义相对路径

时间:2017-06-10 23:51:46

标签: c# asp.net-mvc razor .net-core

是否有可能让自定义相对路径与下面的示例相同:

在剃刀中:

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

结果:

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

定义与%/*/$/

相同的新PATH样式

注意:我知道~/(默认相对路径)。我在谈论如何定义新的?

2 个答案:

答案 0 :(得分:1)

最后我找到了解决方案。 请查看Microsoft如何在以下链接中实现它: 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.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 :(得分:0)

您需要使用~(代字号)。路径没有%运算符:

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