禁用ASP.NET Web应用程序中的Razors默认.cshtml处理程序

时间:2011-06-25 19:20:36

标签: c# asp.net-mvc razor asp.net-webpages

有没有人知道如何从ASP.NET Web应用程序中完全禁用.cshtml扩展名?

本质上我想劫持.cshtml扩展并基于RazorEngine主机提供我自己的实现,但是当我尝试直接访问page.cshtml时,它似乎在现有的WebPages剃刀主机下运行我正试图禁用。

  

注意:它看起来像是在执行   .cshtml页面下   System.Web.WebPages.Razor上下文   作为Microsoft.Data   数据库已初始化。我甚至没有   有任何Mvc或WebPages dll   引用,只是System.Web.dll和   System.Web.Razor的本地副本   RazorEngine.dll

我创建了一个新的ASP.NET Web .NET 4.0应用程序,并尝试清除所有buildProviders和处理程序,如下所示:

<system.web>
    <httpModules>
        <clear/>
    </httpModules>
    <compilation debug="true" targetFramework="4.0">
        <buildProviders>
            <clear/>
        </buildProviders>
    </compilation>

    <httpHandlers>
        <clear/>
        <add path="*" type="MyHandler" verb="*"/>
    </httpHandlers>
</system.web>

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <clear/>
    </modules>
    <handlers>
        <clear/>
        <add path="*" name="MyHandler" type="MyHandler" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
    </handlers>
</system.webServer>

尽管如此,当我访问任何 page.cshtml 页面时,它仍会绕过我的通配符处理程序并尝试执行页面本身。

基本上我想删除.cshtml处理程序/ buildProviders / preprocessing的所有痕迹,这样我就可以自己提供.cshtml页面了,有谁知道我怎么做?

2 个答案:

答案 0 :(得分:3)

如果您要关闭ASP.NET网页,可以在应用设置中设置此标记:

<add key="webpages:Enabled" value="false" />

答案 1 :(得分:2)

您应该可以在ViewEngine方法中注册自己的自定义Application_Start。 Scott Hanselman blogged a sample使用自定义ViewEngine用于移动设备,但这些想法应该与您尝试的内容相同。

编辑(再次)David Fowler suggests

<add key="webpages:Enabled" value="false" />

我总是想知道那个设置是什么,但从来没有开始调查! : - )