2010-06-25 57 views
2

下工作,通過ASP.NET MVC的插件架構,Plug-in architecture for ASP.NET MVCASP.NET MVC的VirtualPathProvider不是IIS 6

我已經分居DLL(插件),其中包含在資源的意見,CSS和JavaScript文件。所以我自己的VirtualPathProvider會從DLL中加載內容,如果是插件的話。它在開發過程中一切正常。但是一旦我將它部署在IIS中,它似乎不起作用。 (I映射whidcard在IIS 6和視圖被示出)

我已經註冊我在global.asax中的VirtualPathProvider作爲

protected void Application_Start() 
{ 
    RegisterRoutes(RouteTable.Routes); 
    HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider()); 
} 

例如。 http://localhost/Plugin/MyPlugin.dll/Styles.MyStyles.css

這應該從plugin.dll被加載,但IIS返回404

我猜的靜態文件都是由IIS處理,並通過asp.net和我的VirtualPathProvider不是去了?有辦法解決這個問題嗎?請說明一下。

在此先感謝。

回答

1

我找到了解決方法,在web.config httpHandlers元素中添加了staticFileHandler。

<add verb="GET,HEAD,POST" path="*" type="System.Web.StaticFileHandler" validate="true" /> 
+0

非常感謝你。我開始擔心我不得不要求將生產機器升級到IIS7 ...... – Greg 2011-06-21 17:07:32

2

如果這是IIS 6,您將需要通配符映射。見Phil Haack的this blog post

+0

我已經在IIS 6中完成了通配符映射,正如我在文章中提到的那樣。 – 2010-06-25 23:06:45

+0

謝謝,但仍然不能用於像http://localhost/Plugin/MyPlugin.dll/Styles.MyStyles這樣的網址。css 我使用我的MyVirtualPathProvider進行了日誌記錄,它甚至沒有運行上面的url。一切工作正常在Visual Studio Web開發服務器,但任何線索? – 2010-06-26 03:40:44

0

我有一些獲得含資源和控制器在我們的MVC環境中工作的外部編譯庫的問題。它在多個項目中使用,不同的錯誤都在不同的項目浮出水面所以這裏所有的事情我不得不這樣做(到目前爲止),以確保靜態文件處理工作:

  1. 在web.config中包括StaticFileHandler,如:

    <添加動詞= 「GET,HEAD」 路徑= 「* JS」 NAME = 「靜態的JS」 TYPE = 「System.Web.StaticFileHandler」/ >

  2. 確保靜態項在路由忽略:

    routes.IgnoreRoute(「{* staticfile}」,new {staticfile = @「。 * \ (CSS | JS | GIF | JPG格式)(/ *。)「});

  3. 註冊一個虛擬路徑提供,如:?

    System.Web.Hosting.HostingEnvironment.RegisterVirtualPathProvider(new EmbeddedResourceVirtualPathProvider.Vpp(assemblies.ToArray()) 
        { 
         //you can do a specific assembly registration too. If you provide the assemly source path, it can read 
         //from the source file so you can change the content while the app is running without needing to rebuild 
         //{typeof(SomeAssembly.SomeClass).Assembly, @"..\SomeAssembly"} 
        }); 
    
  4. 不需要對靜態文件,但值得一提的是獲取視圖/控制器工作所需的內容,即添加MVCContrib並註冊嵌入式視圖引擎:

    PortableAreaRegistration.RegisterEmbeddedViewEngine();