Ist dies eine gute Möglichkeit, alle 404s in .NET zu erfassen, ohne mit der IIS-Konfiguration zu spielen?

  • Die Situation ist, dass es nicht immer möglich ist, mit der web.config zu spielen oder auf IIS zuzugreifen, da ich jedoch sagte, dass ich einen Weg finden musste, alle 404s in einer .NET-Anwendung zu fangen für aspx-Seitenerweiterungen ist es relativ einfach und das Web ist voller Ideen ... aber für Nicht-aspx-Erweiterungen habe ich Folgendes getan und habe nach Rat gesucht. Ist dies ein guter Weg? sind ihre Szenarien, in denen es möglicherweise fehlschlägt? misst es gut in Leistung? Vielen Dank für den Rat.

    Nachdem Sie die Links meiner web.sitemap überprüft und meine Umschreibungen vorgenommen haben, enthält der "else" -Block die folgenden

     string s = context.Server.MapPath(context.Request.AppRelativeCurrentExecutionFilePath);
    if (!System.IO.File.Exists(s)){
        throw new HttpException(404, "Page not found");
    }
     

    und natürlich wird der Rest vom Anwendungsfehler-Handler behandelt. Beachten Sie, dass alle css, js, jpegs und anderen Dateitypen diese Prüfung durchlaufen

    edit: zwei Probleme scheinen mit regelmäßigem Fehlercatch, html und freundlichen URLs beständig zu sein, sie scheinen niemals 404s auszulösen (da andere Dateitypen erraten werden, hängt von isapi-Filtern ab)

    15 December 2011
    Ayyash
2 answers
  • Eine Antwort, die mir GregB kürzlich zur Verfügung gestellt hat, könnte genau das sein, was Sie brauchen:

    Wie sieht es aus mit einem HTTP-Handler, der allen Anforderungen zugeordnet ist?

    Sie müssen eine Wildcard-Anwendungszuordnung, wie hier beschrieben, und korrekt Konfigurieren Sie Ihren HTTP-Handler .

    02 December 2011
    rcphq
  • Hier ist mein Versuch, eine Lösung bereitzustellen.

    Die Anwendungsdomäne wird jedes Mal neu gestartet, wenn wir web.config ändern. Ich habe also web.config geändert Programmgesteuert, aber ich glaube, Sie haben Schreibzugriff auf die Datei web.config, ansonsten lesen Sie nicht weiter.

         void Application_Start(object sender, EventArgs e)
        {
            // Get the current configuration file.
            Configuration configuration = WebConfigurationManager.OpenWebConfiguration("~");
            CustomErrorsSection customErrorsSection = (CustomErrorsSection)configuration.GetSection("system.web/customErrors");
    
            CustomError error = customErrorsSection.Errors.Get("404");
            if (error==null)
            {
                // set as required
                customErrorsSection.Mode = CustomErrorsMode.On;
    
                error = new CustomError(404, "NotFoundPage.aspx");
                customErrorsSection.Errors.Add(error);
                configuration.Save(ConfigurationSaveMode.Modified);
            }
        }
     

    Während Wenn Sie Web.Config ändern, müssen Sie die erforderlichen Bedingungen festlegen. Andernfalls können Sie Endlosschleifen beenden.

    Seien Sie vorsichtig dort

    Ich hoffe, das hilft.

    10 December 2011
    Robert Brown