首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将动态内容包添加到asp.net web优化中

如何将动态内容包添加到asp.net web优化中
EN

Stack Overflow用户
提问于 2013-10-29 05:40:31
回答 2查看 1.5K关注 0票数 4

我使用的是SignalR,它映射到虚拟路径"~/signalr“上的asp.net应用程序。SignalR从虚拟路径“~/signalr/集线器”开始动态地在app上创建javascript代理集线器。

因此,url "[http://myapp]/signalr/hubs"是动态javascript内容的位置。如何将此虚拟路径添加到Asp.Net网络优化绑定中?

从1.1开始的Asp.Net网络优化框架支持VirtuPathProvider的ASP.NET捆绑/缩小:包括动态生成的Javascript

实际上,我不知道如何使用这些VPP。有人能详细解释一下吗?还是举个例子比较好?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-16 15:20:00

将动态内容集成到捆绑过程中需要以下步骤:

  1. 编写请求/构建所需内容的逻辑。对于SignalR,您可以使用以下代码片段: 公共静态字符串GetSignalRContent() { var解析器=新DefaultHubManager(新DefaultDependencyResolver());var代理=新DefaultJavaScriptProxyGenerator(解析器,新NullJavaScriptMinifier());返回proxy.GenerateProxy("/signalr");}
  2. 实现一个虚拟路径提供程序,它封装现有的路径并拦截所有应该传递动态内容的虚拟路径(在您的示例中,仅是“~/signalr/集线器”)。 公共类CustomVirtualPathProvider : VirtualPathProvider { public VirtualPathProvider.CombineVirtualPaths(basePath,virtualPathProvider) { // Wrap --现有虚拟路径提供程序VirtualPathProvider = virtualPathProvider;}受保护的VirtualPathProvider VirtualPathProvider { get;set;}公共覆盖字符串CombineVirtualPaths(string basePath,string relativePath) {返回VirtualPathProvider.DirectoryExists(virtualDir););}公共覆盖bool DirectoryExists(string virtualDir) {返回VirtualPathProvider.DirectoryExists(virtualDir);}公共覆盖bool FileExists(string virtualPath) { if (virtualPath ==“~/signalr/集线器”){返回真;}返回VirtualPathProvider.FileExists(virtualPath);}公共覆盖virtualPathDependenciesCopy.Remove("~/signalr/hubs");CacheDependency GetCacheDependency(string virtualPath,IEnumerable virtualPathDependencies,DateTime utcStart) { // BaseClass不能为您的内容创建CacheDependency,删除它//您还可以添加自己的CacheDependency并使用基本依赖列表virtualPathDependenciesCopy =virtualPathDependencies.Cast().ToList()进行聚合;}公共覆盖字符串GetCacheKey(string virtualPath) {返回VirtualPathProvider.GetCacheKey(virtualPath);}公共重写VirtualDirectory GetDirectory(string virtualDir) {返回VirtualPathProvider.GetDirectory(virtualDir);}公共覆盖MemoryStream(Encoding.Default.GetBytes(GetSignalRContent())));GetFile(string virtualPath) { if (virtualPath ==“~/signalr/集线器”){返回新CustomVirtualFile(virtualPath,新virtualPath}返回VirtualPathProvider.GetFile(VirtualPath));}公共覆盖字符串GetFileHash(string virtualPath,IEnumerable virtualPathDependencies) {返回VirtualPathProvider.GetFileHash(virtualPath,virtualPathDependencies);}公共覆盖对象InitializeLifetimeService() {返回InitializeLifetimeService}公共类CustomVirtualFile : VirtualFile {公共CustomVirtualFile (string virtualPath,Stream stream):base(virtualPath) { Stream = stream;}公共流{ get;私有集;}公共覆盖流打开(){返回流;}}
  3. 注册虚拟路径提供程序: 公共静态RegisterBundles(BundleCollection包){ //设置虚拟路径提供程序BundleTable.VirtualPathProvider =新的BundleCollection Bundle = new (“~/bundle”) .Include("~/Content/static.js") .Include(“~/signalr/集线器”);bundles.Add(包含);

有关虚拟路径提供程序+绑定的一些示例,请参见捆绑、小型化与嵌入式资源捆绑动态生成控制器/操作内容

票数 3
EN

Stack Overflow用户

发布于 2014-04-24 09:37:49

我不确定是否有办法做到这一点,但另一种选择是在构建时生成/signalr/集线器javascript。这样,您就可以将生成的js文件打包。

请参阅http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-javascript-client中的“如何为http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-javascript-client生成的代理创建物理文件”一节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19650541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档