Estoy tratando de hacer que el módulo de enrutamiento funcione con la acción o controlador predeterminado, pero no es así. Siempre me encuentro con la página 404 no encontrada. ¿Olvidé hacer algo? Realmente me gusta el enrutamiento en la función ASP.NET MVC, pero no estoy seguro de poder hacer lo mismo en MR. Estoy usando IIS7 con la compilación de castle trunk para .NET 3.5.Rutas de MonoRail en el Castillo con IIS 7?
Respuesta
¿Cómo está configurando el enrutamiento? Tuve problemas al tratar de administrar las reglas de enrutamiento desde web.config, pero moverlo a código en línea en el inicio de la aplicación funcionó para mí.
Traté de encontrar una respuesta a por qué el xml-way no funcionaba, pero nunca encontré uno. Hicieron una reescritura importante del motor de enrutamiento desde RC3, que podría haberlo roto.
Ejemplo de Application_OnStart()
var rule = new PatternRoute("default", "/") .DefaultForController().Is() .DefaultForAction().Is("index"); RoutingModuleEx.Engine.Add(rule);
Recuerde cargar el RoutingEngineModule antes de la MonoRailHandler en web.config.
He intentado registrar el enrutamiento de esta manera, pero todavía no funciona.
Aquí es mi fichero de configuración:
<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>
Si estás en IIS7, es necesario el registro módulo de enrutamiento en el system.webServer/httpModules nodo.
Los map.web/httpHandlers y los httpModules son ignorados por AFAIK por IIS7.
El enrutamiento MonoRail definitivamente funciona; lo tenemos funcionando felizmente. Acá config y Global.asax.cs fragmentos:
<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>
(De hecho, nunca tuvimos este trabajo sobre IIS6, pero sí en el servidor web-dev - tenemos el apoyo desde entonces y dijeron que trabajaría con un mapeo * a nivel IIS6 a la aspnet_isapi.dll - pero para entonces, el dev corriendo Win2003 actualizado a algo con IIS7 en él, así que no hemos intentado eso)
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
);
}
(la primera ruta maneja nuestra raíz de aplicación)
(los valores se basan en nuestra clase base ThorController para probar para reducir los literales de cadena)
Como comentario adicional, ¿alguien sabe si existe sintaxis para hacer lo que estamos haciendo con el manejo de archivos estáticos en una línea? Seguramente habrá una mejor manera que nuestra "solución" ;-)
- 1. NHibernate Session con IIS 7
- 2. Certificado de cliente con IIS 7
- 3. IIS 7 Protocolos habilitados
- 4. Establecer el sitio específico de IIS 7 con AppCmd?
- 5. Rutas relativas en el servicio WCF alojado en IIS
- 6. IIS 7 no reconoce el archivo svc
- 7. cambiando el nombre de la computadora en un IIS 7
- 8. IIS 7: Tutorial para principiantes
- 9. De Monorail a ASP.Net MVC
- 10. Diagnóstico de errores 404 en IIS 7 y ASP.NET MVC
- 11. Webactivator no se ejecuta en IIS 7
- 12. IIS 7 Deshabilitar "Requerir SSL"
- 13. Cómo habilitar SSL en IIS 7/Windows 7 64bit
- 14. El Administrador de IIS 7 no puede escribir en web.config
- 15. cómo iis 7 genera etags
- 16. error utilizando la sesión en IIS 7
- 17. Asp.Net MVC vs Castle MonoRail
- 18. ¿Cómo prevenir/extender idleTimeout en IIS 7?
- 19. Falta la carpeta Adminscripts en IIS 7
- 20. IIS 7 Cuerpo de solicitud de registro
- 21. HttpHandler no funciona en IIS 7
- 22. personificación de IIS 7 e identidades
- 23. Implementar War File en Microsoft IIS 7
- 24. IIS 7 de compresión que no trabaja
- 25. IIS 7 - Autenticación de Windows no funciona
- 26. IIS 7 httpruntime maxRequestLength límite de 2097151
- 27. instantáneas con contenedores secundarios Castillo de Windsor
- 28. asp.net 4 el enrutamiento no funciona en iis 7
- 29. ¿Cómo implementar el servicio web ASP.NET en IIS 7?
- 30. Problema de enrutamiento con nombre de controlador particular utilizando ASP.NET MVC 1 en IIS 7