2012-09-07 6 views
0

저는 모노레일을 조금 전에 배우기 시작했는데 최근에는 라우팅으로 넘어갔습니다. 안타깝게도 문서는 다소 희소하지만 여러 블로그 게시물에서 정보를 얻을 수있었습니다. 그 중 대부분은 2 년 이상 된 것입니다. 나는 라우팅을 꽤 빠르게 설정했지만 Monorail의 라우팅 엔진은 .jpeg 파일을 컨트롤러/동작 요청으로 혼동한다는 것을 깨닫게되었습니다.모노레일 RC 2.1 라우팅은 누락 된 정적 파일 (예 : .jpg와 같은)이 컨트롤러/액션이라고 생각합니다.

public void Application_OnStart() 
     { 
      log4net.Config.XmlConfigurator.Configure(); 
      RoutingModuleEx.Engine.Add(
       new PatternRoute("<controller>/[action]")); 
     } 

오류 자체는 꽤 분명하게 말한다 :

Global.asax에 내부의 라우팅 엔진의 초기화이기 때문에

<monorail useWindsorIntegration="false" defaultUrlExtension=".rails"> 
    <url useExtensions="true"/> 
    <controllers> 
     <assembly>NetTwitter.Web</assembly> 
    </controllers> 
    <viewcomponents> 
     <assembly>NetTwitter.Web</assembly> 
    </viewcomponents> 
    <viewEngine viewPathRoot="Views" customEngine="Castle.MonoRail.Framework.Views.NVelocity.NVelocityViewEngine, Castle.MonoRail.Framework.Views.NVelocity"/> 
    </monorail> 
<system.web> 
    <httpHandlers> 
    <!-- block direct user access to template files --> 
     <add verb="*" path="*.vm" type="System.Web.HttpForbiddenHandler"/> 
     <add verb="*" path="*.boo" type="System.Web.HttpForbiddenHandler"/> 
     <add verb="*" path="*.st" type="System.Web.HttpForbiddenHandler"/> 
     <add verb="GET" path="*.css" type="System.Web.StaticFileHandler" /> 
     <add verb="GET" path="*.js" type="System.Web.StaticFileHandler" /> 
     <add verb="GET" path="*.jpg" type="System.Web.StaticFileHandler" /> 
     <add verb="GET" path="*.gif" type="System.Web.StaticFileHandler" /> 
     <add verb="GET" path="*.png" type="System.Web.StaticFileHandler" /> 
     <add verb="GET" path="*.jpeg" type="System.Web.StaticFileHandler" /> 
     <add verb="*" path="*.rails" type="Castle.MonoRail.Framework.MonoRailHttpHandlerFactory, Castle.MonoRail.Framework"/> 
    </httpHandlers> 
    <httpModules> 
     <add name="routing" type="Castle.MonoRail.Framework.Routing.RoutingModuleEx, Castle.MonoRail.Framework" /> 
    </httpModules> 

:

webconfig 파일은 꽤 표준입니다

{ "컨트롤러를 찾을 수 없습니다. 영역 : ''컨트롤러 이름 : 'content'"}

그럼 어떻게해야합니까? 미리 감사드립니다.

답변

0

이것은 RoutingModuleEx를 사용하고 있기 때문입니다. 그러면 실제 httpHandler가 일치하기 전에 URL을 다시 작성합니다.

그리고 아마도이 경로는 일반적입니다.

우리는 /static/폴더에 자신의 web.config를 가지고 있기 때문에 해결합니다. 따라서 원래의 web.config를 덮어 씁니다.

이 하나는 contians :

<system.webServer> 
    <handlers> 
     <clear/> 
     <add name="StaticFile" path="*" verb="*" modules="StaticFileModule" resourceType="Either" requireAccess="Read" /> 
    </handlers> 
</system.webServer> 

당신은 그것을 상속 될 수 있기 때문에,뿐만 아니라 여기에서 rounting 모듈을 제거 할 수 있습니다. 우리는 그러나 그것에 어떤 이슈도 알아 차리지 못했지만 실제로 그것에 머리를 넣지 않았습니다. 한 단계 아래로 내려갈 때 또는 하위 폴더가 httpModule을 상속받지 않을 때 경로가 일치하지 않을 수 있습니다.