Rus*_*sty 4 asp.net-mvc-4 bundling-and-minification
嗨我正在使用mvc4应用程序并使用bundle来呈现脚本和CSS
下面是我如何创建捆绑包:
bundles.Add( new StyleBundle( "~/Content/css" ).Include(
"~/Content/bootstrap/css/bootstrap.css",
"~/Content/bootstrap/css/bootstrap-responsive.css",
"~/Content/site.css" ) );
Run Code Online (Sandbox Code Playgroud)
现在它像我在浏览器源中看到的那样生成这样的包:
<link href="/Content/css?v=8HZAB6C8ZnrIPYNFzMQKt0AR4AUsUYBjxPPkbGSRIZo1" rel="stylesheet">
Run Code Online (Sandbox Code Playgroud)
我想要的是删除链接中版本的"v"查询字符串.
谢谢
小智 6
我已经为mvc-bundling创建了一个扩展,它允许你在url中移动查询字符串部分.它可以生成这样的网址
/bundles/css/20130315191550.css
/捆绑/ CSS/_NNIf4XxdPCITzjlKPMgZwHMSUsPyxxGaNCIe6mgAkg1
代码可从http://github.com/unger/Bundling.Extensions获得
也许这可以让你对如何解决它有所了解?
我最终做了以下工作:
首先,我BundleResolver通过此实现更改了默认设置
public class ReplaceQueryStringBundlerResolver : IBundleResolver
{
private readonly IBundleResolver _resolver;
public ReplaceQueryStringBundlerResolver(IBundleResolver resolver)
{
_resolver = resolver;
}
public IEnumerable<string> GetBundleContents(string virtualPath)
{
return _resolver.GetBundleContents(virtualPath);
}
//The important part, modifies the generated Url
public string GetBundleUrl(string virtualPath)
{
var bundleUrl = _resolver.GetBundleUrl(virtualPath);
bundleUrl = bundleUrl.Replace("?v=", "/v/");
return bundleUrl;
}
public bool IsBundleVirtualPath(string virtualPath)
{
return _resolver.IsBundleVirtualPath(virtualPath);
}
}
Run Code Online (Sandbox Code Playgroud)
可以这样在RegisterBundles方法中注册。
BundleResolver.Current = new ReplaceQueryStringBundlerResolver(BundleResolver.Current);
Run Code Online (Sandbox Code Playgroud)
它基本上指示当前的解析器使用我们所需的网址格式。
此解决方案更好,因为我们不必在调用代码中进行任何更改Styles.Render或Scripts.Render调用。
由于我们需要将这些新的绑定映射Urls到bundles表,因此我尝试与当前的Api做类似的事情,但由于无法作为临时解决方案,我在web.config中添加了重写规则,以便我们可以重写/v/为?v=。理想情况下,优化模块应该执行此操作,因为重写规则限制我们遵循某些命名约定,而我的想法是所有捆绑包虚拟路径均应以"~/bundles/"
<rule name="RewriteBundlesWithNoQueryStrings" stopProcessing="true">
<match url="^bundles/(.*)/v/(.*)" />
<action type="Rewrite" url="/bundles/{R:1}?v={R:2}" />
</rule>
<rule name="RewriteBundlesWithNoQueryStringsToDefault" stopProcessing="true">
<match url="^bundles/(.*)/(.*)" />
<action type="Rewrite" url="/bundles/{R:1}" />
</rule>
Run Code Online (Sandbox Code Playgroud)
如果我可以在BundleHandler处理捆绑请求的类中挂钩,我将提供一个更新。
| 归档时间: |
|
| 查看次数: |
3021 次 |
| 最近记录: |