3

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

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

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

我创建了一个新的 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 handlers/buildProviders/preprocessing 的所有痕迹,这样我就可以自己为 .cshtml 页面提供服务,有人知道我该怎么做吗?

4

2 回答 2

3

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

<add key="webpages:Enabled" value="false" />
于 2011-06-27T01:15:03.153 回答
2

您应该能够ViewEngineApplication_Start方法中注册自己的自定义。Scott Hanselman在博客上写了一个使用自定义 ViewEngine 用于移动设备的示例,但是对于您正在尝试做的事情,这些想法应该是相同的。

编辑(再次)大卫福勒建议

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

我一直想知道那个设置是做什么用的,但一直没有时间去调查!:-)

于 2011-06-25T20:12:00.443 回答