Tôi đang cố gắng để có được tôi wildcard http handler to handle *.cshtml pages nhưng yêu cầu không bao giờ đạt xử lý của tôi vì nó có vẻ như nó đang được chặn bởi WebPageHttpModule mà tôi phát hiện tồn tại qua StackTrace này:Làm cách nào để vô hiệu hóa/xóa WebPageHttpModule khỏi các ứng dụng web ASP.NET 4.0?
[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
Tôi đã cố gắng để vô hiệu hóa tất cả các HttpModules sử dụng Web.Config nhưng điều này không có tác dụng, (nó cũng không xuất hiện trong phần IIS HttpModules):
<system.web>
<httpModules>
<clear/>
</httpModules>
</system.web>
....
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<clear/>
</modules>
</system.webServer>
Săn bắn xung quanh với ILSpy cho thấy đoạn mã sau vào System.Web.WebPages.dll là những gì đăng ký 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();
}
}
}
Nhưng đó là một vani NET 4.0 ứng dụng và tôi không có một tham chiếu đến bất kỳ System.Web.WebPages, MVC hoặc dlls Razor Tôi chỉ tham khảo System.Web.
Vậy các hội đồng này được tải như thế nào, tại sao WebPageHttpModule được đăng ký và làm cách nào tôi có thể xóa/vô hiệu hóa nó?
này không làm việc cho tôi. Tôi vẫn kết thúc với 404 cho tất cả các URL kết thúc bằng '.cshtml' Tôi đang cố gắng viết một trình duyệt mã nguồn, và tôi không thể có nó trên * bất kỳ phần mở rộng * URL nào. Bất kỳ đề xuất? –
Ồ, tôi quên đề cập đến rằng tôi có một câu hỏi riêng cho việc này: http://stackoverflow.com/questions/7210515/routing-requests-that-end-in-cshtml-to-a-controller –