简体   繁体   English

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

[英]Custom Relative Path In Asp.Net Core MVC

Is there any possibility to have a custom relative path same as example at below: 是否有可能在下面具有与示例相同的自定义相对路径:

In Razor: 在剃刀:

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

And Result: 结果:

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

Define New PATH style same as %/ or */ or $/ 定义与%/*/$/相同的新PATH样式

Attention: I KNOW ABOUT ~/ (default relative path). 注意:我知道关于~/ (默认相对路径)。 I'm talking about how can I Define NEW ONE? 我在谈论如何定义新的?

Finally I found the solution. 最后我找到了解决方案。 Please take a looks how Microsoft had implement it at link below: https://github.com/aspnet/Mvc/blob/1c4b0fcdf38320b2f02c0bb7c31df5bd391ace07/src/Microsoft.AspNetCore.Mvc.Razor/TagHelpers/UrlResolutionTagHelper.cs#L47 请查看Microsoft如何在以下链接中实现它: https//github.com/aspnet/Mvc/blob/1c4b0fcdf38320b2f02c0bb7c31df5bd391ace07/src/Microsoft.AspNetCore.Mvc.Razor/TagHelpers/UrlResolutionTagHelper.cs#L47

I had take a copy of this class and I renamed that to this: 我已经拿了这个类的副本,我将其重命名为:

[HtmlTargetElement("link", Attributes = "[href^='%/']", TagStructure = TagStructure.WithoutEndTag)]
[HtmlTargetElement("script", Attributes = "[src^='%/']")]
....
public class ThemeUrlResolutionTagHelper : TagHelper
{
   /*Implement tag helper here*/
}

And before creating trimmed string I insert my Theme URL 在创建修剪过的字符串之前,我插入主题网址

url = url.Remove(start, 2).Insert(start, $"~/themes/{Theme.Key}/");
var trimmedUrl = CreateTrimmedString(url, start);

And I changed the ~ to % in FindRelativeStart method 我在FindRelativeStart方法中将〜更改为%

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

And Done! 并做了!

You need to use ~ (tilde). 你需要使用~ (代字号)。 There is no % operator for paths: 路径没有%运算符:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM