6

ルーティング モジュールをデフォルト アクションまたはコントローラで動作させようとしていますが、動作しません。私は常に404ページが見つからないことに直面しています。私は何かをするのを忘れましたか?ASP.NET MVC 機能でのルーティングが本当に好きですが、MR で同じことができるかどうかはわかりません。.NET 3.5 の城トランクからのビルドで IIS7 を使用しています。

4

3 に答える 3

5

IIS7 を使用している場合は、system.webServer/httpModules ノードにルーティング モジュールを登録する必要があります。

system.web/httpHandlers および httpModules は、IIS7 によって無視されることがわかっています。

MonoRail ルーティングは確実に機能します。私たちはそれをうまく稼働させています。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-dev サーバーでは機能しました。それ以来サポートを受けており、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 基本クラスの const です)

余談ですが、静的ファイル処理で行っていることを 1 行で行うための構文が存在するかどうか知っている人はいますか? 私たちの「解決策」よりも良い方法があるに違いありません ;-)

于 2008-12-11T21:58:18.950 に答える
1

ルーティングをどのように構成していますか? web.config からルーティング ルールを管理しようとしたときに問題が発生しましたが、アプリケーションの開始時にインライン コードに移動するとうまくいきました。

xml-way が機能しない理由に対する答えを見つけようとしましたが、見つかりませんでした。彼らは、RC3 以降のルーティング エンジンを大幅に書き直しました。

Application_OnStart() の例

var rule = new PatternRoute( "default", "/" )
    .DefaultForController().Is()
    .DefaultForAction().Is( "インデックス" );

RoutingModuleEx.Engine.Add(ルール);

web.config で MonoRailHandler の前に RoutingEngineModule をロードすることを忘れないでください。

于 2008-11-14T13:31:51.293 に答える
0

このようなルーティングを既に登録しようとしましたが、まだ機能しません。

ここに私の設定ファイルがあります:

<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>
于 2008-11-17T01:12:45.073 に答える