2012-04-07 8 views
0

Dies muss einfach sein und bereits beantwortet, aber ich habe viele Stunden darauf verschwendet. Ich kann mir nicht vorstellen, wie man eine Fehlerseite bei einer falsch eingegebenen Adresse bekommt. Außerdem möchte ich nicht umleiten, sondern die URL behalten. Ich habe viele Kombinationen von CustomErrors, HttpErrors und Application_Error ausprobiert, aber nichts funktioniert für nicht vorhandenen Controller - abhängig von HttpErrors bekomme ich immer IIS 404.0 Seite oder nur eine leere 404 Antwort. Laufen auf IIS 7.5, MVC 3.404-Seite für eine ASP.NET MVC-Anwendung

+0

mögliche Duplikate von [Wie kann ich 404 in ASP.NET MVC richtig behandeln?] (Http://Stackoverflow.com/a/2577095/189950) Für was es wert ist, das ist der Ansatz, den ich verwende. Es ist ein * seriöser * PIA, der anfänglich eingerichtet wird, und er scheint wirklich übermäßig kompliziert zu sein (und ich bin geneigt, das zu denken) - ** aber ** ... er funktioniert großartig, ist sehr flexibel und du kannst bekomme genau was du willst. –

+0

Thx Kappe. Kirk;) Ich werde es versuchen, aber IMHO ist es zu kompliziert für solch ein häufiges Szenario ... – user1318555

+0

das ist in Ordnung, es gibt * viele * Lösungen, die bei diesem Link angeboten werden. Wenn Sie nach der einfachsten möglichen Lösung suchen, ist dies auch abgedeckt (http://stackoverflow.com/a/5507125/189950). –

Antwort

0

Ich erinnere mich nicht, wo ich die Lösung bekam. Aber hier ist der Code, den Fehler zu umgehen: Zunächst erstellen Sie eine Errorcontroller:

public class ErrorController : Controller 
{ 
    // 
    // GET: /Error/ 
    public ActionResult Index() 
    { 
     return RedirectToAction("Index", "Home"); 
    } 

    public ActionResult Generic() 
    { 
     Exception ex = null; 
     try 
     { 
      ex = (Exception)HttpContext.Application[Request.UserHostAddress.ToString()]; 
     } 
     catch { } 

     return View(); 
    } 

    public ActionResult Error404() 
    {    
     return View(); 
    } 
} 

Zweitens könnte der offene globale Datei und fügen Sie den folgenden Code:

protected void Application_Error(object sender, EventArgs e) 
{ 
    Exception ex = Server.GetLastError(); 
    Application[HttpContext.Current.Request.UserHostAddress.ToString()] = ex; 
} 

Drittens Änderung Custom in Ihrem webconfig :

<customErrors mode="Off" defaultRedirect="/Error/Generic"> 
    <error statusCode="404" redirect="/Error/Error404"/> 
</customErrors> 

Mehr: Ich habe ein weiteres Fehlerlayout erstellt. Es macht die Dinge noch klarer. :)

Hoffe das hilft dir.

0

ich die folgende Route verwenden, um alle Anforderungen sicherzustellen, keine andere Route Herbst passend dort, dann können Sie diesen Fall behandeln sehr leicht:

 // this route is intended to catch 404 Not Found errors instead of bubbling them all the way up to IIS. 
     routes.MapRoute(
      "PageNotFound", 
      "{*catchall}", 
      new { controller = "Error", action = "NotFound" } 
     ); 

Karte, die letzte (enthalten diese Aussage nach anderen .MapRoute Aussagen).

+0

Thx Nico, ich benutze Snooze URL, ich überprüfe ob es einen Haken hat. – user1318555

+0

Dies funktioniert nicht für viele Szenarien. Viele Routen werden übereinstimmen, obwohl keine Aktion gefunden wird! Das sind technisch 404s. Deshalb empfehle ich den Ansatz in meinem Kommentar. (die nicht zufällig diese Lösung als eine Komponente einer vielschichtigen Lösung verwendet, die alle Szenarien behandelt) –

+0

@Kirk: Der Punkt in diesem Mapping ist nur um sicherzustellen, dass jede Anfrage mit einem Controller und einer Aktion übereinstimmt. Nicht um sicherzustellen, dass ein bestimmter Controller oder eine bestimmte Aktion überhaupt existiert. In meinem Beispiel habe ich nicht einmal eine NotFound-Aktion in meinem Fehler-Controller; aber jetzt kann ich selbst mit diesem Fehler umgehen, anstatt dass es auf IIS sprudelt. – bevacqua