2008-11-14 15 views
6

मैं रूटिंग मॉड्यूल को डिफ़ॉल्ट क्रिया या नियंत्रक के साथ काम करने की कोशिश कर रहा हूं, लेकिन ऐसा नहीं है। मैं हमेशा 404 पेज के साथ सामना नहीं करता। क्या मैं कुछ करना भूल गया? मुझे वास्तव में एएसपी.नेट एमवीसी फीचर में रूटिंग पसंद है, लेकिन मुझे यकीन नहीं है कि मैं एमआर में भी ऐसा कर सकता हूं। मैं .NET 3.5 के लिए महल ट्रंक से निर्माण के साथ आईआईएस 7 का उपयोग कर रहा हूं।आईआईएस 7 के साथ कैसल मोनो रेल रूटिंग?

उत्तर

1

आप रूटिंग को कैसे कॉन्फ़िगर कर रहे हैं? वेब.कॉन्फिग से रूटिंग-नियमों को प्रबंधित करने का प्रयास करते समय मुझे खुद को समस्याएं थीं, लेकिन एप्लिकेशन-इन-स्टार्ट पर इनलाइन-कोड पर जाने के लिए मेरे लिए काम करना शुरू हुआ।

मैंने जवाब देने का प्रयास किया कि xml-way क्यों काम नहीं करता है, लेकिन कभी नहीं मिला। उन्होंने आरसी 3 के बाद रूटिंग इंजन का एक प्रमुख पुनर्लेखन किया, जो इसे तोड़ सकता था। Application_OnStart से

उदाहरण()

 

var rule = new PatternRoute("default", "/") 
    .DefaultForController().Is() 
    .DefaultForAction().Is("index"); 

RoutingModuleEx.Engine.Add(rule); 

web.config में MonoRailHandler से पहले RoutingEngineModule लोड करने के लिए याद रखें।

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

आप IIS7 पर हैं, तो आप system.webServer/httpModules नोड में मार्ग मॉड्यूल पंजीकरण की आवश्यकता है:

यहाँ मेरी विन्यास फाइल है।

system.web/httpHandlers और httpModules आईआईएस 7 द्वारा अनदेखा AFAIK हैं।

मोनो रेल मार्ग निश्चित रूप से काम करता है; हमारे पास यह है और खुशी से चल रहा है। Here're 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 पर इस काम के है, लेकिन वेब देव सर्वर पर किया था - हम तब से समर्थन मिल गया है और कहा गया था यह aspnet_isapi.dll को IIS6 स्तर पर एक * मानचित्रण के साथ काम करेगा - लेकिन तब तक, देव 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 
      ); 
    } 

(पहला मार्ग हमारे आवेदन रूट को संभालता है)

(मान हमारे थोरकंट्रोलर बेस क्लास पर प्रयास करने के लिए हैं स्ट्रिंग अक्षर पर कटौती करने के लिए)

एक तरफ, किसी को भी पता है कि क्या हम एक पंक्ति में स्थिर फ़ाइल हैंडलिंग के साथ क्या कर रहे हैं, सिंटैक्स मौजूद है? निश्चित रूप से हमारे "समाधान" से बेहतर तरीका होना चाहिए ;-)