【问题标题】:Disable Razors default .cshtml handler in a ASP.NET Web Application在 ASP.NET Web 应用程序中禁用 Razors 默认的 .cshtml 处理程序
【发布时间】:2011-09-22 17:25:36
【问题描述】:

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

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

注意:看起来它正在执行 .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 handlers/buildProviders/preprocessing 的所有痕迹,这样我就可以自己提供 .cshtml 页面,有人知道我该怎么做吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您应该能够在Application_Start 方法中注册自己的自定义ViewEngine。 Scott Hanselman blogged a sample 为移动设备使用自定义 ViewEngine,但对于您正在尝试做的事情,这些想法应该是相同的。

      编辑(再次)David Fowler suggests

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

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

      【讨论】:

      • 不幸的是 System.Web.Mvc.ViewEngines 需要对 MVC 的依赖 - 我真的想删除所有的 deps 和现有的行为。
      • 啊,我明白了。你能从RazorCodeLanguages.Languages property中删除cshtml吗?
      • 不,它仍在尝试运行,但我现在得到了这个异常:pastebin.com/SPvLfn8G - 看起来 WebPageHttpModule 是问题所在,你知道我该如何删除它吗?
      • 您应该能够清楚地知道,这与您在 web.config 示例中的 httpHandlers 相同(请参阅答案中的编辑):msdn.microsoft.com/en-us/library/ms164632.aspx
      • 是的也不起作用(没有效果)-我认为这是因为它们正在使用新的 PreApplicationStartMethod goo.gl/ysNb0 进行动态注册
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 2011-08-04
      相关资源
      最近更新 更多