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

Kev*_*wis 10 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>
Run Code Online (Sandbox Code Playgroud)

现在我正在升级该站点以使用带有Razor cshtml文件的Asp.net WebPages.如果需要的话我可以重命名的所有文件,并使用URL重写,使网址保持不变,但它会容易得多,如果我可以只配置在web.config告诉它,就好像他们是.cshtml解析HTML文件.

我已经搜索了很多,并且找不到与剃刀页面的PageHandlerFactory等效的内容.它看起来好像只是.net 4.0 ISAPI处理程序中的内部机制.

该网站目前正在Windows 2003服务器和IIS 6上运行.我们将在不久的将来升级到2008/IIS 7.5,但我不想等待.

有没有办法让.html文件被razor解析,好像它们是.cshtml文件一样?

Kev*_*wis 17

感谢SLaks指出我正确的方向,但是仍然花了几个小时挖掘MVC源来找出解决方案.

1 - 需要将RazorBuildProvider放在web.config中

<buildProviders>
    <add extension=".html" type="System.Web.WebPages.Razor.RazorBuildProvider"/>
</buildProviders>
Run Code Online (Sandbox Code Playgroud)

并将System.Web.WebPages.Razor添加到程序集(如果它尚不存在).

<assemblies>
     [...]
     <add assembly="System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
Run Code Online (Sandbox Code Playgroud)

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");
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 6

调用WebPageHttpHandler.RegisterExtension.

您可能还需要注册一个自定义WebPageRazorHostFactory来告诉Razor引擎如何处理该文件; 我不确定.