我正在尝试使用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上留下了空白。
答案 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 网站中的特定文件。