0

不久前我开始学习(和使用)Monorail,最近,我涉足了路由。不幸的是,它周围的文档有点稀少,但我设法从各种博客文章中获取了一些信息,其中大多数是 2 岁以上。我设法很快设置了路由,但我意识到 Monorail 的路由引擎将 .jpeg 文件混淆为控制器/操作请求,当它们找不到时。

webconfig 文件非常标准:

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

就像 Global.asax 中路由引擎的初始化一样:

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

错误本身很清楚地说明了这一点:

{“找不到控制器。区域:''控制器名称:'内容'”}

那么,我能做些什么呢?提前致谢。

4

1 回答 1

0

这是因为您正在使用 RoutingModuleEx。这将在实际的 httpHandlers 匹配之前重写 URL。

你的路线可能是一般的。

我们通过拥有一个拥有自己的 web.config 的 /static/ 文件夹来解决它,因此会覆盖原始的 web.config。

这仅包含:

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

您可能还想从此处删除 rounting 模块,因为它可能是继承的。然而,我们没有注意到它有任何问题,但也没有真正投入其中。可能是我们在下一层时不匹配任何路由,或者子文件夹没有继承 httpModules。

于 2012-09-27T13:29:05.000 回答