MVC-Controller namens Controller wirft "Server Error in '/' Application."
Ich bin mit ASP.NET MVC 3 (Razor) und haben einen Domänencontroller mit dem Namen "Controller" - insbesondere die Controller-Klasse name ist "ControllersController".
Hier ist ein Ausschnitt von meinem "Controller" Controller:
public class ControllersController : Controller
{
public ActionResult Index()
{
return View();
}
}
Neben der Erstellung des ControllersController Klasse, ich habe eine Razor-View (Index.cshtml) und korreliert mit der ControllersController Index () - Aktion. Es kann sein, erwähnenswert, dass ich die den Index erstellt.cshtml-Ansicht rechts-klicken Sie die Index () - Methode im Controller und wählen Sie "Add View".
Das problem, das ich erlebe, ist, wenn ein browser versucht zu gehen, um http://localhost/controllers, wird die folgende Fehlermeldung geworfen:
Server Error in '/' Application.
Die Ressource kann nicht gefunden werden.
Beschreibung: HTTP 404. Die Ressource
Sie sind auf der Suche nach (oder eines seiner
Abhängigkeiten) wurde möglicherweise entfernt,
hatte seinen Namen geändert, oder ist
vorübergehend nicht verfügbar. Bitte
Lesen Sie den folgenden URL, und stellen Sie sicher, dass
dass es richtig geschrieben ist.Angeforderte URL: /Controller/
Gibt es zwei Punkte, die ich gerne hinweisen:
- Der Fehler kann vermieden werden, wenn die
browser explizit geht
http://localhost/controllers/index - - Controller, sind nicht benannt
ControllersController nicht zwingen
der browser angeben /index
action in der URL.
Alle die Namenskonventionen, die in MVC, ich bin nicht überrascht, dass ein Domänencontroller mit dem Namen Controller verursacht ein seltsames Verhalten. Meine Frage ist, was muss ich tun, damit ich nicht angeben /index in der browser-URL?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, weil Sie haben einen Ordner namens "Controller" auf der Festplatte in Ihrem Projekt. Eine Möglichkeit wäre, benennen Sie den Ordner etwas anderes. Dieses problem wird nicht existieren, wenn Sie veröffentlichen Sie Ihre Website mit Visual Studio veröffentlichen option, da die Controller-Ordner wird nicht geschoben bekommen. Eine weitere Sekunde umständliche Lösung wäre, um
routes.RouteExistingFiles = true;
imRegisterRoutes
- Funktion in der global.asax.cs. Sie dann können wollen, rufen Sie route.IgnoreRoutes für Elemente in der content-Ordner, etc.Bleiben Sie Weg von allen aktuellen Namen in Ihrem code die Welt wird ein besserer Ort sein, die Kinder nicht Weinen, etc.
"Mit all den Namenskonventionen in MVC, ich bin nicht überrascht, dass ein Domänencontroller mit dem Namen Controller verursacht ein seltsames Verhalten. "
Wenn es fühlt sich komisch an - tun Sie es nicht : )
Offenbar, das problem hat nichts zu tun mit dem Namen des Controllers (d.h. ControllersController), sondern mit dem Namen des URL-route.
In mein Global.asax.cs habe ich noch eine route wie folgt:
Beachten Sie die benutzerdefinierte route (mit dem Namen "Controller") Strecken, um den HomeController (nicht ControllersController).
Ich würde erwarten, dass, wenn das browser-Punkte zu http://localhost/controllers, MVC zurückkehren würde, die /Home/Index-Seite. Stattdessen ein 404-Fehler geworfen wird. Die route ist erfolgreich, wenn der browser Punkte zu http://localhost/controllers/index. - Dies ist die gleiche Symptome wie ich bereits erwähnt am Anfang dieses post.
Basierend auf diesem test, ich denke, es ist sicher anzunehmen, dass das problem nicht mit der Namenskonvention des Controllers, sondern eher mit der Namenskonvention des MVC routing.
Sich zu bewegen mit dem Aufbau meiner Anwendung, ich werde ändern Sie den Namen meines ControllersController zu ControllerSystemsController. In der Zwischenzeit, ich bin daran interessiert zu wissen, speziell, warum das MVC-router nicht wie erwartet funktionieren Routen mit "Controllern", wie die Namen der controller. Kann jemand Licht in diese?