Monorail RC 2.1路由认为缺少静态文件(如.jpg)是一个控制器/动作

时间:2012-09-07 07:36:40

标签: c# .net routing castle-monorail

我刚刚开始学习(和使用)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]"));
        }

错误本身说得很清楚:

  

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

那么,我该怎么办?提前谢谢。

1 个答案:

答案 0 :(得分:0)

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

你的路线可能就此而言。

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

这只是一个人:

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

您可能也希望从此处删除rounting模块,因为它可能会被继承。然而,我们没有注意到它的任何问题,但也没有真正把它放在其中。可能是当我们向下一级时,我们不匹配任何路由,或者子文件夹不继承httpModules。