问题标签 [virtualpathprovider]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3989 浏览

asp.net - 可重用的 ASP.NET 用户控件库:虚拟路径提供程序或 ascx/aspx 副本?

我有一个 ASP.Net Web 应用程序,我想在其他 Web 应用程序中用作可重用的用户控件库。

这个问题的一个解决方案是使用 Scott Guthrie 在这里描述的:

http://weblogs.asp.net/scottgu/archive/2005/08/28/423888.aspx

也就是在使用控件库的 Web 应用程序中复制 ascx/aspx 文件(没有它们的代码隐藏)。

我实际上看到了另一种解决方案:将 ascx/aspx 嵌入到用户控件库中,然后使用自定义虚拟路径提供程序来获取它们。

有人知道哪种解决方案最好吗?

从部署的角度来看,虚拟路径提供者似乎更好。然而,“ascx/aspx 复制”解决方案更容易实现(无需创建自定义虚拟路径提供程序)。

0 投票
1 回答
1124 浏览

asp.net - 自定义 VirtualPathProvider 无法提供以目录结尾的 URL

作为 CMS 的一部分,我创建了一个自定义 VirtualPathProvider,它旨在提供单个文件来代替实际的文件结构。我已将其设置为,如果服务器上实际存在文件,则将提供该文件。如果该文件不存在,则将提供为该地址存储的虚拟内容。这类似于从存储在数据库中的文件为网站提供服务的概念,但在这种情况下,内容存储在服务器上的 XML 文件中。

当向特定页面发出请求时,此设置可以完美运行。例如,如果我请求“www.mysite.com/foobar.aspx”,则会提供为“foobar.aspx”存储的内容。此外,如果我要求“www.mysite.com/subdir/foobar.aspx”,也会提供相应的内容。

问题是这样的:如果我要求像“www.mysite.com/foobar”这样的东西,事情就会开始崩溃。如果该目录存在于磁盘上(并且在 IIS 中没有配置默认页面,例如 index.aspx),我将收到“Directory Listing Denied”错误。如果该目录不存在,我将简单地得到一个 404 - Resource Not Found。

我已经尝试了几件事,到目前为止,我所做的一切都没有改变。似乎 IIS 只是简单地注意到不存在目录(或现有目录中的默认文件)并提供自己的错误代码,而从未询问我的应用程序如何处理该请求。如果它确实进入了应用程序,我将能够解决问题,但就目前而言,我很迷茫。有谁知道 IIS 中是否存在导致此问题的某些设置?

我已经寻找了我能找到的关于这个主题的每一个资源,但现在都是空的。我知道这应该是可能的,因为我已经阅读了有关从数据库和 ZIP 文件中提供内容的教程。帮助!

ps,我正在运行 IIS6 和 .NET 3.5

0 投票
1 回答
931 浏览

iis-6 - IIS 6 上的 VirtualPathProvider 无法正确处理文件流缓存

我正在开发一个框架,其中 .aspx 和 .master 页面嵌入在程序集中,使用 VirtualPathProvider 将 url 路由到特定的嵌入资源。

示例 url:/_framework.aspx/mypage.aspx(使用 /_framework.aspx/mymaster.master)

  • _framework.aspx 将使 IIS6 通过 ASP.NET 框架路由请求
  • .aspx 之后的所有内容都被视为 .NET 框架中的 PathInfo

在 Visual Studio 2008 Web 服务器中,virtualPath 是正确的:/_framework.aspx/mypage.aspx,但在 IIS6 中,virtualPath 是:/_framework.aspx

如果我请求两个文件:/_framework.aspx/file1.css 和 /_framework.aspx/file2.css,则 file2 将具有与 file1 相同的内容。

我怀疑 IIS6 会考虑文件路径 (_framework.aspx) 并缓存从程序集返回的文件流,从而将两个 url 视为同一个文件。

临时解决方案:

我已经实现了这样的 CacheDependency 类

它现在使文件流缓存过期,但不适用于母版页,我猜是因为它是在缓存过期之前通过 NotifyDependencyChanged 请求的。

需要的解决方案

如果我在 GetCacheDependency 中返回null,则 IIS6 不会立即使文件过期。立即使文件过期或完全禁用缓存的正确方法是什么。更好的是,我想纠正 IIS6 处理 url 的方式,因为缓存实际上很好,如果它使用完整的文件 url。

0 投票
1 回答
1700 浏览

master-pages - 母版页和虚拟路径提供程序的问题

我在 dll 中构建了一个可部署的母版页,并使用虚拟路径提供程序在多个 ASP.NET Web 应用程序中引用它。我遇到的问题是,这真的混淆了我的 aspx 页面的源视图。

这是我每个 aspx.cs 页面中的代码,它实际上将 MasterPage 附加到每个内容页面,但正如我所说,现在,我的<asp:Content>标签变得非常混乱,我不能再按 CTRL K + CTRL + D 我的内容页面了,它抛出一切的验证错误。帮助!

0 投票
3 回答
1673 浏览

asp.net - Asp.net MVC VirtualPathProvider 视图解析错误

我正在为 Asp.net MVC 2 开发一个插件系统。我有一个包含控制器和视图作为嵌入式资源的 dll。

我使用 StructureMap 扫描控制器的插件 dll,然后我可以将它们拉出并在请求时实例化它们。这工作正常。然后我有一个 VirtualPathProvider 改编自这篇文章

VPP 似乎也运行良好。找到视图并将其拉出到流中。然后我收到一个解析错误Could not load type 'System.Web.Mvc.ViewUserControl<dynamic>'.,我在前面的任何可插入视图示例中都找不到该错误。为什么我的观点在这个阶段不能编译?

谢谢你的帮助,

伊恩

编辑:

Getting closer to an answer but not quite clear why things aren't compiling. Based on the comments I checked the versions and everything is in V2, I believe dynamic was brought in at V2 so this is fine. I don't even have V3 installed so it can't be that. I have however got the view to render, if I remove the <dynamic> altogether.

So a VPP works but only if the view is not strongly typed or dynamic

This makes sense for the strongly typed scenario as the type is in the dynamically loaded dll so the viewengine will not be aware of it, even though the dll is in the bin. Is there a way to load types at app start? Considering having a go with MEF instead of my bespoke Structuremap solution. What do you think?

0 投票
3 回答
2617 浏览

asp.net - ASP .NET MVC 虚拟路径提供程序

我正在编写一个 VirtualPathProvider 来动态加载位于不同目录中的 MVC 视图。我在 MVC 之前成功拦截了调用(在 FileExists 中),但是在我的 VirtualPathProvider 中,我得到了原始的、预先路由的 url,例如:

就个人而言,我知道 MVC 会寻找

~/Apps/Administration/Views/Account/LogOn.aspx

并且我应该从中读取文件内容

但我宁愿不将逻辑硬编码为“添加名为 Views 的目录并将 aspx 添加到末尾”。

此逻辑存储在哪里,如何将其放入我的虚拟路径提供程序?

谢谢。对不起,如果我不清楚。

0 投票
2 回答
559 浏览

asp.net-mvc - ASP.NET MVC、自定义 VirtualPathProvider 和 IIS6

我已经实现了自己的 VirtualPathProvider 来加载“嵌入式”视图。

这在从 Visual Studio 运行时效果很好,但在 IIS6 上运行时我收到“未找到视图”消息。

web.config 中是否缺少任何内容,或者是否还有其他问题?

我添加了一些日志记录,似乎即使我在 Application_Start 中注册了自定义 VirtualPathProvider,仍然使用 System.Web.Hosting.MapPathBasedVirtualPathProvider。

0 投票
4 回答
714 浏览

asp.net - IIS6 中未使用自定义 VirtualPathProvider

我在 global.asax 中的 Application_Start 方法中添加了以下几行:

然而,在 IIS6 中部署此应用程序时从未使用过“TestVirtualPathProvider”(它在 ASP.NET 开发服务器中使用)。

编辑:默认路径提供程序始终正确完成其工作并正确提供(非嵌入式)视图。问题只是我想使用自己的路径提供程序来提供嵌入式视图。因此,最初,我已经配置了以下通配符映射:

使用通配符映射截图

为什么这在 IIS6 中不起作用的任何可能原因?是否有任何其他因素(例如处理程序)可能会影响使用的 VirtualPathProvider?

0 投票
1 回答
868 浏览

.net - ASP .NET VirtualPathProvider HttpCompileException

我有一个从数据库加载我的 aspx 文件内容的 VirtualPathProvider。一切似乎都很好,除非我的 aspx 文件引用了我的 web.config 中未明确提及的命名空间或程序集。

解决方案似乎很简单,对吧?将程序集和导入指令添加到页面......但这似乎不起作用。我仍然得到以下 HttpCompileException:

即使,在我保存在数据库中的 test.aspx 页面中,我有:

现在,我已经知道 MyApp.Data 已经加载到 AppDomain 中(我在运行时通过检查 AppDomain.CurrentDomain.GetAssemblies() 进行了验证)并且我知道加载 MyApp.Data 程序集的请求没有失败(因为我已经绑定到 AppDomain.ResolveAssembly 事件,并且在异常发生之前它没有触发)。此外,如果我将程序集目录中的名称更改为 MyApp.Data123(一个虚假名称),页面会在尝试加载程序集时爆炸。

如果我从页面中完全删除程序集指令,那么我会得到命名空间 找不到类型或命名空间名称“MyApp”......所以在那里有程序集指令似乎确实有点帮助......

知道我在这里缺少什么吗?谢谢。

0 投票
2 回答
2765 浏览

asp.net-mvc - 每次请求的 ASP.NET MVC 2 VirtualPathProvider GetFile

我已经实现了一个 VirtualPathProvider。VirtualPathProvider 从文件系统读取视图。

但是我的问题是该方法GetFile(string virtualPath)并非每次都针对每个请求执行。我认为这与缓存有关,不是吗?我想要的是每次为每个请求获取文件。因为在某些情况下,文件系统中的页面会被修改,用户希望系统立即显示更改。

谢谢。