2010-10-08 18 views
8

Estoy tratando de convertir una aplicación ASP .NET MVC 2 para que se ejecute en nginx/mono 2.8. Hasta ahora parece funcionar bastante bien, excepto que la ruta predeterminada no funciona cuando la ruta está vacía. Estoy procesando todas las solicitudes hasta el servidor fastcgi y recibo una página ASP .NET 404 no encontrada.La ruta principal de Mono MVC 2 no funciona

es decir, esto no funciona

http://mysite.com 

Pero esto hace

http://mysite.com/home 
archivo

Mi Global.asax.cs se parece a esto

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text.RegularExpressions; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Routing; 

namespace MyProject 
{ 
    public class MvcApplication : System.Web.HttpApplication 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      // Default route 
      routes.MapRoute(
       "Default",      // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults 
       new string[] {"MyProject.Controllers"} 
      ); 
     } 

     protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      RegisterRoutes(RouteTable.Routes); 
     } 
    } 
} 

EDIT: Algunos más información en mi configuración. Estoy ejecutando OS X 10.6 si eso hace alguna diferencia. También existe el mismo problema para la ruta predeterminada de cualquier área en el proyecto MVC.

+0

¿Una ruta como esta ayuda? 'routes.MapRoute (" Root ","/", new {controller =" Home ", action =" Index "})' –

+0

Sí, agregar una ruta específica como esa funciona, pero preferiría no hacerlo como IIS y MVC no lo requieren No estoy seguro si es un problema con Mono o mi configuración de Nginx. – Alex

+0

de acuerdo. No es lo que quieres hacer. –

Respuesta

5

De hecho, me encontré con el mismo problema y lo resolvió (al menos en mi situación) por completo error ...

En el nginx walkthrough en el sitio del proyecto Mono, lo dice a entrar en estas líneas en su nginx. conf:

index index.html index.htm default.aspx Default.aspx; 
fastcgi_index Default.aspx; 

Bueno, lo configuran de la misma manera exacta (o así que pensé) en dos máquinas virtuales. El problema es que una máquina virtual tenía su raíz url y otra no. Lo que resultó ser que olvidé el punto y coma en la línea 'índice' en la máquina virtual que funcionó, por lo que la línea 'fastcgi_index' se interpretó como parte de la línea 'índice'.

Así que en la VM que no funcionó, eliminé ese punto y coma. ¿Y adivina qué? Funcionó. Entonces agregué el punto y coma y eliminé completamente la línea 'fastcgi_index' y todavía funcionó. Por lo tanto, basándome en esta evidencia anecdótica y en algunas suposiciones, diría que la línea 'fastcgi_index' no debería incluirse en las aplicaciones MVC. Bueno, al menos MVC 3, no he probado nada más.

+0

¡Impresionante que funcionó! – Alex

1

¿Ha seguido la configuración de nginx de esta página ?: http://www.mono-project.com/FastCGI_Nginx

Mi conjetura sería el documento predeterminado se está en el camino.

+0

Sí, tengo exactamente esa configuración. Y todavía no funciona :( – Alex

+0

Esto es totalmente estúpido, pero ¿y si agregas una barra inicial a la url de ruta: "/ {controller}/{action}/{id}". Lo único que se me ocurre considerar Las sugerencias de @ Alex técnicamente funcionan, y las rutas predeterminadas de tu Área tampoco funcionan (lo que significa que tu documento predeterminado no debería ser un problema) –