6

Я пытаюсь сделать модуль маршрутизации работает с действием по умолчанию или контроллером, но это не так. Я всегда сталкиваюсь с 404 страницей, которая не найдена. Забыл ли я что-нибудь сделать? Мне очень нравится маршрутизация в ASP.NET MVC, но я не уверен, что смогу сделать то же самое в MR. Я использую IIS7 со сборкой из ствола замка для .NET 3.5.Замок MonoRail Маршрутизация с помощью IIS 7?

ответ

1

Как вы настраиваете маршрутизацию? У меня возникли проблемы при попытке управлять правилами маршрутизации из web.config, но переключение на встроенный код на приложении-start работало для меня.

Я попытался найти ответ на вопрос, почему xml-путь не работал, но так и не нашел. Они сделали большой передел двигателя маршрутизации с RC3, который мог сломать его.

Пример из Application_OnStart()

 

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

RoutingModuleEx.Engine.Add(rule); 

Запомнить загрузить RoutingEngineModule перед MonoRailHandler в web.config.

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 - AFAIK игнорируются IIS7.

MonoRail routing определенно работает; мы работаем счастливо. Here're конфигурации и 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, но сделал на сервере веб-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, чтобы попробовать для сокращения строковых литералов)

В любом случае, кто-нибудь знает, существует ли синтаксис для выполнения того, что мы делаем со статической обработкой файлов в одной строке? Разумеется, это должно быть лучше, чем наше «решение» ;-)

 Смежные вопросы

  • Нет связанных вопросов^_^