我刚刚开始学习(和使用)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]"));
}
错误本身说得很清楚:
{“未找到控制器。区域:''控制器名称:'内容'”}
那么,我该怎么办?提前谢谢。
答案 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。