2010-10-08 9 views
8

Próbuję przekonwertować aplikację ASP .NET MVC 2 na Nginx/mono 2.8. Do tej pory wydaje się, że działa całkiem dobrze, z tym że domyślna trasa nie działa, gdy ścieżka jest pusta. Pośredniczę wszystkie żądania przez serwer fastcgi i otrzymuję dostęp do strony nie znalezionej ASP .NET 404.Trasa główna Mono MVC 2 nie działa

znaczy to nie działa

http://mysite.com 

Ale to robi

http://mysite.com/home 
plik

My Global.asax.cs wygląda to

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: trochę więcej informacji na mojej konfiguracji. Używam OS X 10.6, jeśli to robi jakąkolwiek różnicę. Również ten sam problem istnieje dla domyślnej trasy dla dowolnych obszarów w projekcie MVC.

+0

Czy taka trasa jest pomocna? 'routes.MapRoute (" Root ","/", nowy {controller =" Home ", akcja =" Index "})' –

+0

Tak, dodanie konkretnej trasy działa, ale wolałbym nie robić tego jako IIS i MVC nie wymagaj tego. Nie jestem pewien, czy jest to problem z Mono czy moją konfiguracją Nginx. – Alex

+0

Uzgodnione. To nie jest to, co chcesz robić. –

Odpowiedz

5

I rzeczywiście wpadł na ten sam problem i rozwiązać go (przynajmniej w mojej sytuacji) przez kompletne pomyłkę ...

W nginx walkthrough na stronie projektu Mono jest, to mówi, aby wprowadzić te linie w nginx. conf:

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

Cóż, to ustawić w ten sam sposób (tak myślałem) na dwóch maszynach wirtualnych. Problem polega na tym, że jedna maszyna wirtualna ma adres URL roota, a druga nie. Okazało się, że zapomniałem średnika na linii "indeksu" na maszynie wirtualnej, która działała, tak że linia "fastcgi_index" została zinterpretowana jako część linii "indeksu".

Tak więc na maszynie wirtualnej, która nie działała, usunąłem ten średnik. I zgadnij co? Zadziałało. Więc dodałem średnik i całkowicie usunąłem linię "fastcgi_index" i nadal działało. Opierając się na tych niepotwierdzonych dowodach i pewnej domysłowej pracy, powiedziałbym, że linia "fastcgi_index" nie powinna być zawarta w aplikacjach MVC. Cóż, przynajmniej MVC 3, nie testowałem niczego innego.

+0

Niesamowite, że udało się! – Alex

1

Czy śledzić konfiguracji nginx z tej strony ?: http://www.mono-project.com/FastCGI_Nginx

Moje przypuszczenie byłoby domyślny dokument jest uzyskanie w drodze.

+0

Tak, mam dokładnie taką konfigurację. I nadal nie działa :( – Alex

+0

To jest kompletnie głupie, ale co jeśli dodasz początkowy ukośnik do adresu URL trasy: "/ {controller}/{action}/{id}". Tylko o czym mogę myśleć @ Sugestie Alexa działają technicznie, a domyślne trasy w Twoim obszarze również nie działają (co oznacza, że ​​domyślny dokument nie powinien stanowić problemu) –