我無法弄清楚如何爲靜態文件啓用自定義路線。爲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