2008-11-14 54 views
6

我试图让路由模块使用默认的动作或控制器,但它没有。我总是面对404页面未找到。我忘了做什么?我真的很喜欢在ASP.NET MVC功能中路由,但我不确定我能在MR中做同样的事情。我正在使用IIS7和.NET 3.5的castle trunk构建。与IIS 7的城堡MonoRail路由?

回答

1

你如何配置路由?尝试从web.config管理路由规则时,我遇到了问题,但是在application-start中将其移至内联代码。

我试图找到答案,为什么xml的方式不工作,但从来没有找到一个。自从RC3以来,他们对路由引擎进行了重大改写,这可能已经破坏了它。从Application_OnStart

实施例()

 

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

RoutingModuleEx.Engine.Add(rule); 

记住MonoRailHandler之前加载RoutingEngineModule web.config中。

0

我试着注册这样的路由,但它仍然不起作用。

这里是我的配置文件:

<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

如果你在IIS7,你需要的路由模块登记在system.webServer /的HttpModules节点。

system.web/httpHandlers和httpModules被IIS7忽略的AFAIK。

MonoRail路由绝对有效;我们已经开始并且愉快地运行。我这里还有配置和的global.asax.cs片段:

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

(事实上,我们从来没有在IIS6这个工作,但web开发服务器上一样 - 从那时起,我们已经得到了支持,并被告知它将与在IIS6级到ASPNET_ISAPI.DLL一个*测绘工作 - 但那时,运行Win2003的dev的更新与IIS7了东西,所以我们还没有尝试过)

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

(中第一个路由处理我们的应用程序根目录)

(这些值是我们的ThorController基类中的常量,用于尝试以减少字符串文字)

顺便说一句,任何人都知道是否存在句法来做我们在一行中处理静态文件的操作?肯定有比我们的“解决方案”更好的方法;-)