2011-06-26 22 views
10

私が取得しようとしている私のwildcard http handler to handle *.cshtml pagesが、それはそれは私が発見しWebPageHttpModuleによって傍受こののStackTraceを経由して存在しているように見えますよう要求は私のハンドラに到達したことがない:使用しているすべてのHttpModulesを無効にするには、私が試したASP.NET 4.0 WebアプリケーションからWebPageHttpModuleを無効/削除するにはどうすればよいですか?

[HttpException (0x80004005): Exception of type 'System.Web.HttpException' was thrown.] 
    System.Web.WebPages.ApplicationStartPage.ExecuteStartPage(HttpApplication application, Action`1 monitorFile, Func`2 fileExists, Func`2 createInstance, IEnumerable`1 supportedExtensions) +88 
    System.Web.WebPages.ApplicationStartPage.ExecuteStartPage(HttpApplication application) +287 
    System.Web.WebPages.WebPageHttpModule.StartApplication(HttpApplication application, Action`1 executeStartPage, EventHandler applicationStart) +113 
    System.Web.WebPages.WebPageHttpModule.StartApplication(HttpApplication application) +71 
    System.Web.WebPages.WebPageHttpModule.Init(HttpApplication application) +156 
    System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +431 
    System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +194 
    System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +339 
    System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +253 

[HttpException (0x80004005): Exception of type 'System.Web.HttpException' was thrown.] 
    System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +8972180 
    System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +97 
    System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +256 

Web.Configしかし、これは何の効果、(それはまた、IISのHttpModulesセクションに表示されません)がありません:ILSpyと周りの狩猟

<system.web> 
    <httpModules> 
     <clear/> 
    </httpModules> 
</system.web> 
    .... 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <clear/> 
    </modules> 
</system.webServer> 

はSystem.Web.WebPages.dllに以下のコードを登録しているものであり、明らかになりましたWebPageHttpModule

namespace System.Web.WebPages 
{ 
    [EditorBrowsable(EditorBrowsableState.Never)] 
    public static class PreApplicationStartCode 
    { 
     private static bool _startWasCalled; 
     public static void Start() 
     { 
      if (PreApplicationStartCode._startWasCalled) 
      { 
       return; 
      } 
      PreApplicationStartCode._startWasCalled = true; 
      WebPageHttpHandler.RegisterExtension("cshtml"); 
      WebPageHttpHandler.RegisterExtension("vbhtml"); 
      PageParser.EnableLongStringsAsResources = false; 
      DynamicModuleUtility.RegisterModule(typeof(WebPageHttpModule)); 
      ScopeStorage.CurrentProvider = new AspNetRequestScopeStorageProvider(); 
     } 
    } 
} 

しかし、それは、バニラ、.NET 4.0アプリケーションだと私はのSystem.Webを参照のみだ任意のSystem.Web.WebPages、MVCやカミソリのDLLへの参照を持っていません。

これらのアセンブリはどのようにロードされていますか、なぜWebPageHttpModuleが登録されていますか、どのように削除/無効化できますか?

答えて

8

あなたはASP.NETのWebページをオフにしようとしている場合は、アプリの設定で、このフラグを設定することができます。

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

これは私のために働いていません。私は '.cshtml'で終わるすべてのURLに対して404という名前で終わります。私はソースコードブラウザを書こうとしていますが、*任意の* URL拡張子に失敗することはありません。助言がありますか? –

+0

ああ、私はこれについて別の質問があることに言及するのを忘れていた:http://stackoverflow.com/questions/7210515/routing-requests-that-end-in-cshtml-to-a-controller –

2

ちょうど掘り出し物があり、そこにコードのいくつかがあります。

ここWebPageHttpHandlerからのコードのスニップです:

namespace System.Web.WebPages 
{ 
    public class WebPageHttpHandler : IHttpHandler, IRequiresSessionState 
    { 
    private static List<string> _supportedExtensions = new List<string>(); 

    public static void RegisterExtension(string extension) 
    { 
     WebPageHttpHandler._supportedExtensions.Add(extension); 
    } 

    // [snip] 
} 

あなたはリフレクションを使用するために喜んでいると、あなたは完全信頼で実行している場合、あなたはリフレクション経由_supportedExtensionsにWebPageHttpHandlerの静的なプライベートフィールドにアクセスすることができましたあなたのPreApplicationInitハンドラのリストからcshtmlとvbhtmlの項目を削除します。私がDynamicModuleUtilityで見ることができたことから、WebPageHttpHandlerの登録を削除することは、それよりも複雑です。

関連する問題