我管理一个大型的asp.net网站,该网站之前已经从静态html网站转换为asp.net。
由于多种原因(主要是SEO),我们决定在最初转换网站时不将所有文件重命名为.aspx。只需将buildProvider和httpHandler添加到web.config即可轻松完成。
<buildProviders>
<add extension=".html" type="System.Web.Compilation.PageBuildProvider"/>
</buildProviders>
<httpHandlers>
<add path="*.html" verb="*" type="System.Web.UI.PageHandlerFactory"/>
</httpHandlers>
现在我正在升级网站以使用带有Razor cshtml文件的Asp.net WebPages。我可以根据需要重命名所有文件,并使用url重写使URL保持不变,但是如果我可以配置web.config告诉它解析.html文件就好像它们是.cshtml会容易得多
我搜索了很多,并且找不到与剃刀页面的PageHandlerFactory相同的内容。它看起来好像只是.net 4.0 ISAPI处理程序中的内部机制。
该网站目前正在Windows 2003服务器和IIS 6上运行。我们将在不久的将来升级到2008 / IIS 7.5,但我不想等待。
有没有办法让.html文件被razor解析,好像它们是.cshtml文件一样?
答案 0 :(得分:16)
感谢SLaks指出我正确的方向,但仍然花了几个小时挖掘MVC源来找出解决方案。
1 - 需要将RazorBuildProvider放在web.config
中<buildProviders>
<add extension=".html" type="System.Web.WebPages.Razor.RazorBuildProvider"/>
</buildProviders>
并将System.Web.WebPages.Razor添加到程序集(如果它尚不存在)。
<assemblies>
[...]
<add assembly="System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
2 - 在global.asax
Application_Start()
方法
// Requires reference to System.Web.WebPages.Razor
System.Web.Razor.RazorCodeLanguage.Languages.Add(
"html", new CSharpRazorCodeLanguage());
WebPageHttpHandler.RegisterExtension("html");
答案 1 :(得分:6)
Call WebPageHttpHandler.RegisterExtension
您可能还需要注册一个自定义WebPageRazorHostFactory来告诉Razor引擎如何处理该文件;我不确定。
答案 2 :(得分:0)
因为这实际上已经解决了与VS2012 / .net 4.5一起使用的问题。 在C#5项目中使用上面的例子我没有运气:(