我可以使用Razor提供.html文件,好像它们是.cshtml文件而不更改我所有页面的扩展名吗?

时间:2011-02-24 21:55:23

标签: asp.net iis-6 razor

我管理一个大型的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文件一样?

3 个答案:

答案 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()方法

中添加2行
// 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项目中使用上面的例子我没有运气:(