2013-06-07 3 views
1

내 mvc4 hot-towel 프로젝트에 엿보기 진단 도구를 추가하고 싶습니다.핫 타올 mvc4를 사용하여 엿볼 수있는 방법은 무엇입니까?

나는 http://nuget.org/packages/Glimpse.Mvc4/ 명령을 따르고 있으며, 내 프로젝트에서 엿볼 mvc4 nuget 패키지를 설치하고 있습니다.

아래 그림과 같이 제대로 설치되고 종속성을 얻고 web.config를 업데이트 중입니다.

<httpModules> 
    <add name="Glimpse" type="Glimpse.AspNet.HttpModule, Glimpse.AspNet" /> 
</httpModules> 
<httpHandlers> 
    <add path="glimpse.axd" verb="GET" type="Glimpse.AspNet.HttpHandler, Glimpse.AspNet" /> 
</httpHandlers> 

<handlers> 
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    <add name="Glimpse" path="glimpse.axd" verb="GET" type="Glimpse.AspNet.HttpHandler, Glimpse.AspNet" preCondition="integratedMode" /> 
</handlers> 
<validation validateIntegratedModeConfiguration="false" /> 
<modules> 
    <add name="Glimpse" type="Glimpse.AspNet.HttpModule, Glimpse.AspNet" preCondition="integratedMode" /> 
</modules> 

및 그러나

<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd"> 
<!-- If you are having issues with Glimpse, please include this. It will help us figure out whats going on. 
    <logging level="Trace" />--> 
<!-- Want to use Glimpse on a remote server? Ignore the LocalPolicy by removing this comment. 
    <runtimePolicies> 
    <ignoredTypes> 
     <add type="Glimpse.AspNet.Policy.LocalPolicy, Glimpse.AspNet"/> 
    </ignoredTypes> 
    </runtimePolicies>--> 

, 내가 프로젝트와 유형의 URL과 같은 http://mylocalurl.com/glimpse.axd를 실행합니다. 그것은 axd 파일을 찾을 수 없기 때문에 나는 엿볼 수있게되었습니다.

P. 핫 타올 템플릿에 대한 색인 페이지를로드하기위한 맞춤 경로를 정의했습니다.

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Load", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

답변

3

Glimpse.axd를 찾을 수없는 이유는 경로가 구성되는 순서 때문입니다.

을 설치하는 경우 RouteDebugger NuGet package 당신은 클래스의 App_Start 폴더 안에 찾을 수있는 Glimpse.axd 요청, 뜨거운 수건 템플릿에 의해 설치, 즉 경로를 처리하는 다른 경로가 있음을 볼 수 있습니다 HotTowelRouteConfig

그리고이 경로가 그 행마다 행 파라미터에 대한 디폴트 값을 가지며, 따라서 유사하므로, Glimpse.axd 대한 요청을 처리한다 (인해 WebActivator의 사용) 전에 RouteConfig.RegisterRoutes의 실행 추가되기 때문에

using System.Web.Mvc; [assembly: WebActivator.PreApplicationStartMethod( typeof(throwaway.App_Start.HotTowelRouteConfig), "RegisterHotTowelPreStart", Order = 2)] namespace throwaway.App_Start { ///<summary> /// Inserts the HotTowel SPA sample view controller to the front of all MVC routes /// so that the HotTowel SPA sample becomes the default page. ///</summary> ///<remarks> /// This class is discovered and run during startup /// http://blogs.msdn.com/b/davidebb/archive/2010/10/11/light-up-your-nupacks-with-startup-code-and-webactivator.aspx ///</remarks> public static class HotTowelRouteConfig { public static void RegisterHotTowelPreStart() { // Preempt standard default MVC page routing to go to HotTowel Sample System.Web.Routing.RouteTable.Routes.MapRoute( name: "HotTowelMvc", url: "{controller}/{action}/{id}", defaults: new { controller = "HotTowel", action = "Index", id = UrlParameter.Optional } ); } } } 
Glimpse.axd 요청과 일치합니다.

당신은 HotTowelRouteConfig을 제거하여이 문제를 해결할 수 있지만, 당신은 예를 들어 URL이 명시 적으로 http://mylocalurl.com/HotTowel/Index를 이동해야하거나 RouteConfig.RegisterRoutes에 명시 적으로 경로를 HotTowelRouteConfig

[assembly: WebActivator.PreApplicationStartMethod(
    typeof(throwaway.App_Start.HotTowelRouteConfig), "RegisterHotTowelPreStart", Order = 2)] 

에서 WebActivator 부분을 제거하고 등록 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");을 호출 한 후에 HotTowelRouteConfig.RegisterHotTowelPreStart()을 호출하면 기본적으로 예제가 제공되고 Glimpse.axd가 예상대로 처리됩니다.

어느 쪽이든이 두 옵션은 어쩌면 예는 (당신이 예를 들어 생산에 예제를 가지고 싶어하지 않는)

자신의 NuGet 패키지에 넣어해야 제거하거나 HotTowel NuGet 패키지에서 관리하는 파일을 변경 포함
+0

다음 단계를 따르면 올바르게 작동합니다. – parth1729

1

Hot Towel GitHub repository에 체크인 된 최신 소스 코드가 약간 다릅니다.이것은 axd 샘플에 의해 처리되는 것을 배제하여, 작업을 포함 Glimpse.axd 허용

public static void RegisterHotTowelPreStart() { 

    // Ignore requests to .axd HttpHandlers 
    System.Web.Routing.RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    // Preempt standard default MVC page routing to go to HotTowel Sample 
    System.Web.Routing.RouteTable.Routes.MapRoute(
     name: "HotTowelMvc", 
     url: "{controller}/{action}/{id}", 
     defaults: new 
     { 
      controller = "HotTowel", 
      action = "Index", 
      id = UrlParameter.Optional 
     } 
); 

:

HotTowelRouteConfig에서 RegisterHotTowlPreStart 함수로 변화된다.