3

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

找到这个例子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");

还是没有效果。不幸的是,我在谷歌上画了一个空白。

4

2 回答 2

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 程序集,如此处所示但您也可以在Global.asax文件的Application_Start方法中执行此操作。

最后,我们还需要添加“html”作为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>
于 2014-06-22T03:02:02.287 回答
0

你想使用路由。您使用的是网络表单还是 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 条路由,但您可以添加 url 过滤器。

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

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

于 2013-09-05T03:33:41.583 回答