ASP.NET WebPages使用html扩展名

时间:2013-09-05 02:22:46

标签: asp.net asp.net-webpages

我正在尝试使用ASP.NET WebPages来理解使用静态.html文件的现有网站(大约500个)。不幸的是,我的SEO人员要求网站维护其现有的目录/文件名,所以我需要使用.html。

找到this example后,我尝试在web.config下的compilation/buildProviders/下添加扩展名为:

<add extension=".html" type="System.Web.WebPages.Razor.RazorBuildProvider"/>

并添加了一个程序集:

<add assembly="System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

这仍然无法呈现页面。它只是作为源输出。我还在项目的根目录中创建了Global.asax,并将其添加到Application_Start()

System.Web.Razor.RazorCodeLanguage.Languages.Add(
    "html", new System.Web.Razor.CSharpRazorCodeLanguage());
System.Web.WebPages.WebPageHttpHandler.RegisterExtension("html");

仍然没有效果。不幸的是,我在Google上留下了空白。

2 个答案:

答案 0 :(得分:4)

我在试图解决同样的问题时遇到了这个问题 - 尽管在我的情况下,出于好奇心的缘故。

这是您在web.config文件中需要的内容:

<system.web>
   <compilation>
      <buildProviders>
         <add extension=".html"
              type="System.Web.WebPages.Razor.RazorBuildProvider, System.Web.WebPages.Razor"/>
      </buildProviders>
   </compilation>
</system.web>
<system.webServer>
   <handlers>
      <add name="Html" verb="*" path="*.html"
           type="System.Web.Webpages, WebPageHttpHandler"/>
   </handlers>
</system.webServer>

但这本身并不足够!我们需要使用WebPageHttpHandler注册扩展名。
通常,您可以在_AppStart文件中执行此类操作 - 遗憾的是,当应用程序启动时(即执行_AppStart时),它会迭代WebPageHttpHandler的SupportedExtensions中的项目,所以我们无法在AppStart中实际注册扩展名 我所做的是使用PreApplicationStartMethod属性创建了一个新的.dll程序集,如here所示,但您也可以在Global.asax文件Application_Start中执行此操作。方法。

最后,我们还需要添加&#34; html&#34;作为RazorCodeLanguage.Languages字典的扩展,以便Razor引擎可以弄清楚如何编译模板。

示例Global.asax文件:

<%@ Application Language="C#" %>
<script runat="server">
   void Application_Start(object sender, EventArgs e) 
   {
      System.Web.WebPages.WebPageHttpHandler.RegisterExtension("html");
      var languages = System.Web.Razor.RazorCodeLanguage.Languages;
      languages.Add("html", languages["cshtml"]);
   }       
</script>

答案 1 :(得分:0)

您想使用路由。您使用的是webforms还是MVC? Global.asax是一个好的开始。在此处添加完整代码:

namespace Name
{
    public class Global : System.Web.HttpApplication
    {

        protected void Application_Start(object sender, EventArgs e)
        {
            RegisterRoutes(RouteTable.Routes);
        }

        protected void Session_Start(object sender, EventArgs e)
        {

        }

        protected void Application_BeginRequest(object sender, EventArgs e)
        {

        }

        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {

        }

        protected void Application_Error(object sender, EventArgs e)
        {

        }

        protected void Session_End(object sender, EventArgs e)
        {

        }

        protected void RegisterRoutes(RouteCollection routes)
        {
            routes.MapPageRoute("Route1", "OldPage.html", "~/NewPage.aspx");

        }

        protected void Application_End(object sender, EventArgs e)
        {

        }
    }
}

显然,您不想手动添加500条路线,但可以添加网址过滤器。

请参阅:http://msdn.microsoft.com/en-us/library/cc668201.ASPX

  

ASP.NET路由使您可以使用不必映射到的URL   网站中的特定文件。