2008-11-14 21 views
6

Yönlendirme modülünü varsayılan eylem veya denetleyici ile çalıştırmaya çalışıyorum, ancak yapmıyor. Her zaman 404 sayfayla karşılaşıyorum. Bir şey yapmayı unuttum mu? ASP.NET MVC özelliğindeki yönlendirme işlemini gerçekten çok seviyorum, ancak MR'da da aynısını yapabileceğime emin değilim. .NET 3.5 için kale gövdesinden yapı ile IIS7'yi kullanıyorum.Kale MonoRail IIS 7 ile Yönlendirme?

cevap

1

Yönlendirmeyi nasıl yapılandırıyorsunuz? Yönlendirme kurallarını web.config'ten yönetmeye çalışırken kendimden bahsediyordum, ancak uygulama-başlatımda satır içi kodun benim için çalışmasına neden olmuştum.

ben xml yönlü neden işe yaramadığını bir cevap bulmaya çalıştı, ama asla bulunan. RC3'ten beri yönlendirme motorunun büyük bir yeniden yazımını yaptılar, bu onu kırmış olabilirdi. Application_OnStart gelen

Örnek()

 

var rule = new PatternRoute("default", "/") 
    .DefaultForController().Is() 
    .DefaultForAction().Is("index"); 

RoutingModuleEx.Engine.Add(rule); 

web.config'de MonoRailHandler önce RoutingEngineModule yük unutmayın.

0

Bu şekilde yönlendirmeyi kaydetmeyi denedim ancak hala çalışmıyor. Eğer IIS7 iseniz, system.webServer/httpModules düğüm içinde yönlendirme modülü kayıt gerekir

<system.web> 
<httpHandlers> 
    <add verb="*" path="*.rail" type="Castle.MonoRail.Framework.MonoRailHttpHandlerFactory, Castle.MonoRail.Framework" /> 
    <add verb="*" path="*.vm" type="System.Web.HttpForbiddenHandler" /> 
    <add verb="*" path="*.boo" type="System.Web.HttpForbiddenHandler" /> 
    <add verb="*" path="*.st" type="System.Web.HttpForbiddenHandler" /> 
</httpHandlers> 
<httpModules> 
    <add name="routing" type="Castle.MonoRail.Framework.Routing.RoutingModuleEx, Castle.MonoRail.Framework" /> 
</httpModules></system.web> 
<system.webServer> 
    <handlers> 
     <add name="MR" path="*.rail" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" preCondition="classicMode,runtimeVersionv2.0,bitness32" /> 
    </handlers> 
</system.webServer> 
5

:

İşte benim yapılandırma dosyasıdır.

system.web/httpHandlers ve httpmodules AFAIK IIS7 tarafından göz ardı edilir.

MonoRail yönlendirme kesinlikle çalışır; biz var ve mutlu bir şekilde koşuyoruz. Here're yapılandırma ve global.asax.cs parçacıkları:

<system.web> 
    <authentication mode="None" /> 

    <compilation debug="true" /> 

    <!-- IIS6/integrated dev server handler/module config --> 
    <httpHandlers> 
     <clear /> 
     <add path="favicon.ico" verb="*" type="System.Web.StaticFileHandler"/> 
     <add path="Trace.axd" verb="*" type="System.Web.Handlers.TraceHandler"/> 
     <add path="*.config" verb="*" type="System.Web.HttpForbiddenHandler" /> 
     <add path="*.spark" verb="*" type="System.Web.HttpForbiddenHandler" /> 
     <add path="*.sparkjs" verb="*" type="System.Web.HttpForbiddenHandler" /> 
     <add path="/content/**/*.*" verb="*" type="System.Web.StaticFileHandler" /> 
    <add path="/content/**/**/*.*" verb="*" type="System.Web.StaticFileHandler" /> 
    <add path="/content/**/**/**/*.*" verb="*" type="System.Web.StaticFileHandler" /> 
    <add path="/content/**/**/**/**/*.*" verb="*" type="System.Web.StaticFileHandler" /> 
    <add path="*" verb="*" type="Castle.MonoRail.Framework.MonoRailHttpHandlerFactory, Castle.MonoRail.Framework" /> 
     <add verb="*" path="*.castle" type="Castle.MonoRail.Framework.MonoRailHttpHandlerFactory, Castle.MonoRail.Framework"/> 
    </httpHandlers> 

    <httpModules> 
     <add name="routing" type="Castle.MonoRail.Framework.Routing.RoutingModuleEx, Castle.MonoRail.Framework" /> 
     <add name="PerRequestLifestyle" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.MicroKernel" /> 
    </httpModules> 

    <trace enabled="true"/> 

</system.web> 

<!-- IIS 7 handler/module config --> 
<system.webServer> 
    <handlers> 
     <clear /> 
     <add name="FavIcon" path="favicon.ico" verb="*" type="System.Web.StaticFileHandler"/> 
     <add name="Trace" path="Trace.axd" verb="*" preCondition="integratedMode" type="System.Web.Handlers.TraceHandler"/> 
     <add name="BlockConfig" path="*.config" verb="*" preCondition="integratedMode" type="System.Web.HttpForbiddenHandler" /> 
     <add name="BlockSpark" path="*.spark" verb="*" preCondition="integratedMode" type="System.Web.HttpForbiddenHandler" /> 
     <add name="BlockSparkJs" path="*.sparkjs" verb="*" preCondition="integratedMode" type="System.Web.HttpForbiddenHandler" /> 
     <add name="content" path="/content/**/*.*" verb="*" preCondition="integratedMode" type="System.Web.StaticFileHandler" /> 
     <add name="content2" path="/content/**/**/*.*" verb="*" preCondition="integratedMode" type="System.Web.StaticFileHandler" /> 
     <add name="content3" path="/content/**/**/**/*.*" verb="*" preCondition="integratedMode" type="System.Web.StaticFileHandler" /> 
     <add name="content4" path="/content/**/**/**/**/*.*" verb="*" preCondition="integratedMode" type="System.Web.StaticFileHandler" /> 
     <add name="castle" path="*" verb="*" type="Castle.MonoRail.Framework.MonoRailHttpHandlerFactory, Castle.MonoRail.Framework" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv2.0" /> 
    </handlers> 

    <modules> 
     <add name="routing" type="Castle.MonoRail.Framework.Routing.RoutingModuleEx, Castle.MonoRail.Framework" /> 
     <add name="PerRequestLifestyle" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.MicroKernel" /> 
    </modules> 

    <validation validateIntegratedModeConfiguration="false" /> 

</system.webServer> 

(Aslında, biz IIS6 bu çalışma var hiç ama web dev sunucusunda yaptı - o zamandan beri desteğini var ve söylendi()

 protected virtual void RegisterRoutes(IRoutingRuleContainer engine) 
    { 
     engine.Add 
      (
      new PatternRoute(ThorController.CtlrHome, "/[controller]") 
       .DefaultForController().Is(ThorController.CtlrHome) 
       .DefaultForArea().Is(ThorController.AreaPublic) 
       .DefaultForAction().Is(ThorController.ActionIndex) 
      ); 

     engine.Add 
      (
      new PatternRoute(ThorController.KeyDefault, "/<area>/<controller>/[action]/[id]") 
       .DefaultForArea().Is(ThorController.AreaPublic) 
       .DefaultForAction().Is(ThorController.ActionIndex) 
       .DefaultFor(ThorController.KeyId).IsEmpty 
      ); 
    } 

ama o, Win2003 çalışan dev üzerine IIS7 şey güncellendi, bu nedenle bu denemediyseniz - bu aspnet_isapi.dll için IIS6 seviyesinde * haritalama ile çalışacak ilk rota bizim uygulama kökü)

(değerler denemek için ThorController temel sınıf üzerinde consts vardır kolları biz bir çizgide ele statik dosyayla ne yaptığınızı yapmaya sözdizimi mevcutsa kenara) dize hazır bir olarak

azaltmak için, bilen var? Kesinlikle bizim "çözüm" den daha iyi bir yolu olmalı ;-)