代码之家  ›  专栏  ›  技术社区  ›  Vorleak Chy

带iis 7的城堡单轨线路?

  •  6
  • Vorleak Chy  · 技术社区  · 16 年前

    我试图使路由模块与默认操作或控制器一起工作,但它没有。我总是面对404页找不到。我忘记做什么了吗?我真的很喜欢asp.net mvc特性中的路由,但是我不确定我是否可以在im先生使用iis7和从castle trunk构建的.net 3.5中做同样的事情。

    3 回复  |  直到 16 年前
        1
  •  5
  •   Peter Mounce    16 年前

    如果您在iis7上,则需要在system.webserver/httpmodules节点中注册路由模块。

    system.web/httphandlers和httpmodules可能被iis7忽略。

    单轨路线确实有效;我们已经启动并愉快地运行。下面是config和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的开发人员已经更新到了带有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基类上的常量,试图减少字符串文本)

    顺便说一下,有人知道是否有语法可以在一行中处理静态文件吗?肯定会有比我们的“解决方案”更好的方法。

        2
  •  1
  •   jishi    16 年前

    如何配置路由?在尝试从web.config管理路由规则时,我自己也遇到了一些问题,但是将它移到application start上的内联代码中对我很有用。

    我试图找到一个答案来解释为什么xml方法不起作用,但一直没有找到答案。他们在RC3之后对路由引擎进行了一次重大重写,这可能会破坏路由引擎。

    来自application_onstart()的示例

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

    记住在web.config中的monorailhandler之前加载routingenginemodule。

        3
  •  0
  •   Vorleak Chy    16 年前

    我已经试过像这样注册路由,但仍然不起作用。

    这是我的配置文件:

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