gpt4 book ai didi

c# - 使用 IIS 7 的 CaSTLe MonoRail 路由?

转载 作者:太空狗 更新时间:2023-10-29 21:37:20 25 4
gpt4 key购买 nike

我试图让路由模块与默认操作或 Controller 一起工作,但它没有。我总是面对 404 页面未找到。我忘记做某事了吗?我真的很喜欢 ASP.NET MVC 中的路由功能,但我不确定我是否可以在 MR 中做同样的事情。我将 IIS7 与 .NET 3.5 的 caSTLe trunk 构建一起使用。

最佳答案

如果你在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 的开发人员更新到带有 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 基类的常量,以尝试减少字符串文字)

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

关于c# - 使用 IIS 7 的 CaSTLe MonoRail 路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/290043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com