我无法弄清楚如何为静态文件启用自定义路线。为asp.net MVC静态资产设置合成路线
我想设置我的asp.net mvc应用程序使用合成的URLs版本资产。这使我可以将我的静态资产的过期设置为最大值,并且每次构建时都会增加版本。
我想在编写我的cshtml模板时将该版本放入我的静态资产的路径中。最后,我需要设置路由来忽略URL的版本组件,并只提供静态资产。
例如:/js/1.2.3.4/libs/require.js
- >/js/libs/require.js
我已经得到了前两段的工作,但我无法弄清楚如何忽略了对静态文件的URL的一部分。
Layout.cshtml
...
<script data-main="/js/@(((myApplication)(HttpContext.Current.ApplicationInstance)).Version)/config"
src="/js/@(((myApplication)(HttpContext.Current.ApplicationInstance)).Version)/libs/require.js"></script>
...
myApplication.cs
public class myApplication : HttpApplication {
...
public string Version {
get {
var baseVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
#if DEBUG
var span = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime());
baseVersion += "_" + span.TotalMilliseconds;
#endif
return baseVersion;
}
}
}
编辑:
我设法让一个workable solution(的sheikhomar提供)使用OnBeg在应用inRequest处理程序重写URL时,它匹配一个正则表达式,但似乎过度做到这一点在每次请求:
private readonly Regex jsPattern = new Regex("^/js/[0-9._]*/(.*)$", RegexOptions.IgnoreCase);
protected void OnBeginRequest(Object sender, EventArgs e) {
var match = jsPattern.Match(Request.Url.AbsolutePath);
if (match.Success) {
var fileName = match.Groups[1].Value;
Context.RewritePath(string.Format("/js/{0}", fileName));
}
}
对于那些仍然感兴趣,请检查此:http://stackoverflow.com/a/1185171/908336 – 2016-03-02 17:02:44