2008-11-14 10 views
6

Ich versuche, das Routing-Modul mit Standardaktion oder Controller arbeiten zu lassen, tut es aber nicht. Ich werde immer mit 404 Seite nicht gefunden. Habe ich vergessen, etwas zu tun? Ich mag wirklich Routing in ASP.NET MVC-Funktion, aber ich bin mir nicht sicher, ich könnte das gleiche in MR. Ich verwende IIS7 mit dem Build von Castle Trunk für .NET 3.5.Castle MonoRail Routing mit IIS 7?

Antwort

1

Wie konfigurieren Sie das Routing? Ich hatte mich selbst Probleme, wenn ich versuchte, die Routing-Regeln von web.config zu verwalten, aber das Verschieben in Inline-Code beim Programmstart funktionierte für mich.

Ich habe versucht, eine Antwort zu finden, warum der xml-Weg nicht funktioniert hat, aber nie einen gefunden. Sie haben die Routing-Engine seit RC3 neu geschrieben, das könnte sie kaputt gemacht haben.

Beispiel aus Application_OnStart()

 

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

RoutingModuleEx.Engine.Add(rule); 

bleiben die RoutingEngineModule vor dem MonoRailHandler in web.config zu laden.

0

Ich habe versucht, Routing wie folgt bereits zu registrieren, aber es funktioniert immer noch nicht.

Hier ist meine Konfigurationsdatei:

<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

Wenn Sie auf IIS7 sind, dann müssen Sie die Routing-Modul Registrierung im system.webServer/Httpmodules Knoten.

Die system.web/httpHandlers und httpModules sind AFAIK von IIS7 ignoriert.

MonoRail Routing funktioniert definitiv; wir haben es glücklich gemacht. Here're config und global.asax.cs Schnipsel:

<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> 

(In der Tat, wir nie diese Arbeit auf IIS6 bekamen, aber taten auf dem Web-Dev-Server - wir haben Unterstützung bekommen und seitdem wurden gesagt, es würde das aspnet_isapi.dll am IIS6 Ebene mit * Mapping arbeiten - aber dann, das dev Win2003 aktualisiert, um etwas mit IIS7 auf sie, so haben wir nicht versucht, dass)

 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 
      ); 
    } 

(den Lauf Erste Route behandelt unsere Anwendung root)

(die Werte sind auf unserer ThorController-Basisklasse zu versuchen zu testen um Zeichenfolgenliterale zu reduzieren)

Nebenbei bemerkt, weiß jemand, ob es eine Syntax gibt, um zu tun, was wir mit der statischen Dateiverarbeitung in einer Zeile machen? Es gibt sicherlich einen besseren Weg als unsere "Lösung" ;-)