Могу ли я обслуживать файлы .html с помощью Razor, как если бы они были файлами .cshtml без изменения расширения всех моих страниц? - PullRequest
10 голосов
/ 25 февраля 2011

Я управляю большим сайтом 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>

Сейчас я обновляю сайт, чтобы использовать веб-страницы Asp.net с файлами Razor cshtml. Я могу переименовать все файлы, если это необходимо, и использовать переписывание URL, чтобы URL остались прежними, однако было бы намного проще, если бы я мог просто настроить web.config, чтобы он мог анализировать файлы .html, как если бы они были .cshtml. .

Я довольно долго искал и не мог найти ничего похожего на PageHandlerFactory для бритвенных страниц. Похоже, это всего лишь внутренний механизм обработчика ISAPI .net 4.0.

Сайт в настоящее время работает на сервере Windows 2003 и IIS 6. В ближайшем будущем мы будем обновляться до 2008 / IIS 7.5, но я бы предпочел не ждать этого.

Есть ли способ получить файлы .html для анализа бритвой, как если бы они были .cshtml файлами?

Ответы [ 3 ]

17 голосов
/ 01 марта 2011

Спасибо 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 - Добавить 2 строки в global.asax Application_Start() метод

// Requires reference to System.Web.WebPages.Razor
System.Web.Razor.RazorCodeLanguage.Languages.Add(
    "html", new CSharpRazorCodeLanguage());

WebPageHttpHandler.RegisterExtension("html");
6 голосов
/ 25 февраля 2011

Call WebPageHttpHandler.RegisterExtension .

Вам также может понадобиться зарегистрировать пользовательский WebPageRazorHostFactory, чтобы сообщить механизму Razor, что делать с файлом; Я не уверен.

0 голосов
/ 29 августа 2013

Поскольку это фактически было решено для использования с VS2012 / .net 4.5. Как и в приведенных выше примерах в проекте C # 5, мне не повезло: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...