webentwicklung-frage-antwort-db.com.de

ASP.Net MVC - Ressource nicht gefunden Fehler

Ich bin völlig neu in ASP.Net MVC. Ich habe gerade ein MVC3-Projekt in Visual Studio 2010 erstellt. Als ich die Anwendung gerade ausführte, gab es das korrekte Ergebnis im Browser. Die URL lautet http: // localhost: 4163 / . Dann habe ich "Als Startseite festlegen" auf "Index.cshtml" im Ordner "~\Views\Home" angewendet. Als ich die Anwendung ausführte, wurde die URL http: // localhost: 4148/Views/Home/Index.cshtml und es wurde angegeben, dass die Ressource nicht gefunden werden kann. Was mache ich, um es zu korrigieren? Wo erfolgt die URL-Zuordnung?

Global.asax-Datei:

using System.Web.Mvc;
using System.Web.Routing;

namespace TEST
{

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }
    }
 }
60
Lijo

Die URL-Zuordnung oder das "Routing" wird von Global.asax im Stammverzeichnis Ihrer ASP.NET MVC-Site ausgeführt.

Wenn Sie auf "Als Startseite festlegen" klicken, werden die Projekteinstellungen so geändert, dass diese Datei relativ zum Anwendungsstamm gesucht wird. In MVC ist die Standardroute zu Ihrer Indexseite jedoch http://localhost:4163/Home/Index - lesen Sie etwas wie this , um eine Vorstellung davon zu bekommen, wie Routing funktioniert.

Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie "Properties", klicken Sie auf die Registerkarte "Web" und wählen Sie " Specific Page ", lassen Sie das Textfeld leer. Wenn Sie jetzt mit dem Debuggen beginnen, sollten Sie erneut zur Startseite wechseln. Überprüfen Sie die Standard-Routenparameter, um zu erfahren, warum in der RegisterRoutes-Methode in Global.asax

93
greg84

Stellen Sie sicher, dass Sie eine HomeController.cs-Klasse in Ihrem Controller-Ordner erstellt haben.

24
Naren Chejara

In einem ähnlichen Problem hatte meine Aktion ein HTTP-Attribut "POST", aber ich habe versucht, die Seite zu öffnen (standardmäßig "GET").

Also musste ich eine HTTP "GET" -Version erstellen.

10
sajad

Ich habe auch den gleichen HTML-404-Fehler:

Die Ressource wurde nicht gefunden. Beschreibung: HTTP 404. Die gesuchte Ressource (oder eine ihrer Abhängigkeiten) wurde möglicherweise entfernt, hat ihren Namen geändert oder ist vorübergehend nicht verfügbar. Bitte überprüfen Sie die folgende URL und stellen Sie sicher, dass sie richtig geschrieben ist.

Aber nach eingehender Prüfung stellte ich fest, dass ich den Namen des Controllers als Default1Controller anstatt es in HomeController zu ändern. Als ich die Änderung vornahm und die App debuggte, funktionierte es. Hoffe, es wird dir helfen, wenn du das gleiche Problem hast.

6

Führen Sie die folgenden Schritte aus, um Ihre asp.net mvc-Anwendung auszuführen.

  • Controller-Erstellung
    Klicken Sie mit der rechten Maustaste auf den Controller-Ordner und fügen Sie den Controller hinzu. Hinweis - Controller Postfix nicht entfernen. Die ASP.NET MVC-Konventionen.
    Geben Sie dem Controller einen Namen als "DemoController" und Sie können sehen, dass die Aktion "Index" in "DemoController" vorhanden ist. "Index" ist die Standardaktion, die beim Erstellen eines Controllers vorhanden ist.

  • Erstellung anzeigen
    Klicken Sie mit der rechten Maustaste auf den Aktionsnamen "Index" und behalten Sie den Standardansichtsnamen bei, d. H. "Index", und klicken Sie auf die Schaltfläche "Hinzufügen".

  • Routeneinstellung
    Öffnen Sie die Datei Global.asax und Sie werden sehen, dass die Standardeinstellung der Route dem "Home" -Controller und der "Index" -Aktion zugeordnet ist. Ändern Sie sie in "Demo" -Controller und "Index" -Aktion. Die URL-Zuordnung wird in die Datei Global.asax geschrieben. Wenn Sie die Datei Global.asax öffnen, wird die folgende Einstellung angezeigt:

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

    Ändern Sie es in:

    routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Demo", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    

Und führen Sie Ihre Anwendung aus. Sie können sehen, dass Ihre Anwendung funktioniert.

5
Neo

Unglaublicherweise hatte ich versehentlich das öffentliche Schlüsselwort vom Controller gelöscht!

enter image description here

Ich stelle mir vor, dass dies genau niemand anderem helfen wird, aber Sie werden es nie erfahren ...

5
Andy Brown

Nun, Sie können die Standardseite in asp.net mvc nicht einstellen.
Gehen Sie zu global.asax.cs und sehen Sie sich die Definition des Routings an. Die Standardroute zeigt auf die Indexmethode HomeController.
Sie sollten sich ein paar kurze Filme über asp.net mvc ansehen oder versuchen, Tutorial für das Nerd-Dinner zu finden, um sich schnell mit dem Framework vertraut zu machen.

Ich denke, die besten Antworten zu Tutorials wurden bereits als Antwort auf diese Frage gegeben:

ASP.NET MVC-Kurzanleitungen

4
Eugeniu Torica

Ich hatte vor einiger Zeit ein ähnliches Problem bei der Verwendung von VS 2012. Dieses Problem wurde behoben, indem die Anwendung durch Klicken auf Build> Rebuild neu erstellt wurde.

2
FatGit

In asp.net mvc können Sie die Option 'Als Startseite festlegen' nicht verwenden, da mvc-Ansichten nicht unabhängig sind, wie z. B. Webformularseiten. Es handelt sich nur um Vorlagendateien zur Anzeige Ihres Modells. Sie haben kein verarbeitendes http-Modul. Alle Webanforderungen sollten Controller-Aktionen durchlaufen. Sie können keine Ansichten direkt anfordern.

2
Evgeny Levin

Fügen Sie diese hier hinzu - wenn Probleme auftreten, bei denen die Indexseite des Home Controllers nicht mehr geladen wird, liegt dies möglicherweise daran, dass Sie Ihr StartUp Project noch nicht eingerichtet haben. Klicken Sie mit der rechten Maustaste auf das Projekt, bei dem Ihre App gestartet werden soll, und legen Sie es als Startprojekt fest.

1
Jeff Moretti

Wenn Sie IIS Express verwenden. Es kann sein, dass Sie ein anderes Projekt geöffnet haben, das dasselbe virtuelle Verzeichnis verwendet. Beim Öffnen der zweiten Lösung ordnet VS das Verzeichnis IIS einem anderen Speicherort zu. Infolgedessen wird es bei verschiedenen Problemen nicht funktionieren. Ich hatte den gleichen Fehler wie der Themenstarter.

So beheben Sie das Problem: Schließen Sie alle Instanzen von VS Studio. Öffnen Sie VS mit dem Projekt, das Sie gerade bearbeiten und neu erstellen.

1
user1325696

(MVC 5): Ändern Sie RouteConfig.cs So, dass zwei routes enthalten sind:

            routes.MapRoute(
            name: "DefaultWithLanguage",
            url: "{language}/{controller}/{action}/{id}",
            defaults: new { language = "fa", controller = "Home", action = "Index", id = UrlParameter.Optional },
            constraints: new {language= "[a-z]{2}"}
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { language = "fa", controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

wenn also der Sprachteil der Route nicht angegeben wird, werden die Controller-Namen, die nicht mit Regex "[a-z]{2}" übereinstimmen, nicht verwechselt und die Standardsprache wird ersetzt und zur restlichen Route weitergeleitet.

1
ALIRA

Wenn Sie alle oben genannten Lösungen ausprobiert haben und das Problem weiterhin besteht, verwenden Sie diese einfache Lösung. Öffnen Sie den Facebook-Debugger über diesen Link , geben Sie die Seiten-URL ein und klicken Sie auf die Schaltfläche Neue Scrape-Informationen abrufen. Dies wird Ihr Problem lösen.

Der Grund dafür (was ich denke) ist, dass Facebook API den aktuellen Status der Seite speichert und auf seinem eigenen Server anzeigt. Wenn Sie während des Codierens auf die Schaltfläche "Teilen" klicken und Ihre Seite tatsächlich nicht hochgeladen wird, konnte Facebook API diese Seite nicht auf dem Server finden und speichert den Seitenstatus als "Ressource nicht gefunden". Jetzt wird dieselbe Nachricht auch nach dem Hochladen der Seite angezeigt. Wenn Sie eine Seite aus dem Facebook-Debugger abrufen, wird alles von Grund auf neu aufgelöst und der aktuelle Status der Seite wird gespeichert. Anschließend funktioniert die Freigabeschaltfläche, ohne dass die Codierung geändert wird.

Ich hatte einen Controller mit dem Namen usersController, also habe ich versucht, ihn als Startseite zu erstellen, indem ich den Standard-Controller wie unten angegeben von "Home" in "usersController" änderte.

 public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "usersController", action = "Index", id = UrlParameter.Optional }
        );
    }

Die Lösung bestand darin, den Controller-Standardwert auf Benutzer und nicht auf usersController zu ändern

 public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "users", action = "Index", id = UrlParameter.Optional }
        );
    }
0
Salman Saleh

in der Adressleiste bei einer Browsereingabe wie folgt: ControllerName/ActionMethod nicht ControllerName/ViewName eingeben, zum Beispiel in der Adressleiste: http: // localhost: 55029/test2/getview cshtml-Dateicode:

@{
Layout = null; 
}

<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>MyView</title>
</head>
<body>
<div>            
</div>
</body>
</html>

und cs Datei Code:

public ActionResult GetView()
{
return View("MyView");
}
0
zokaee hamid

Für mich wurde das Problem durch ein Namespace-Problem verursacht.

Ich hatte meinen Projektnamespace in meinen Webprojektklassen von MyProject auf MyProject.Web aktualisiert, aber vergessen, die Projekteigenschaften >> Standardnamespace zu aktualisieren. Daher verwendete ich beim Hinzufügen eines neuen Controllers den alten Namespace. Alles was ich tun musste war den Namespace im neuen Controller zu korrigieren und es funktionierte.

0
jmdon

die Startseite von asp.net mvc project lautet standardmäßig "Aktuelle Seite". Öffnen Sie einfach eine serverseitige Datei und starten Sie das Projekt. auf diese weise öffnet mvc den voreingestellten controller, der homecontroller für ihr projekt ist

0
Yorgo

Einfache Lösung mit HomeController.cs:

Öffnen Sie die Datei HomeController.cs im Ordner Controllers. Fügen Sie den Code hinzu:

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

Wenn Sie einen anderen Controller verwenden (nicht HomeController):

So sehen Sie Ihre Ansicht:

http://localhost:1234/xyz/MyView

In der Datei xyzController.cs unter dem Ordner Controllers

stellen Sie sicher, dass Sie eine ActionResult-Methode wie die folgende hinzufügen:

public ActionResult MyView()
{
    return View(myView); //pass in your view if you want.
}

Ich habe auch diese Meldung erhalten, als ich meinen Modellnamen nicht richtig angegeben habe:

@using (Html.BeginForm ("MyView", "MyModel", FormMethod.Get))

0
live-love

Ich hatte die gleiche Art von Problem, außer dass ich nicht den Namen Index.cshtml Für mein View verwendete. Ich habe es zum Beispiel LandingPage.cshtml Gemacht. Mein Problem war, dass das ActionResult in meinem Controller war nicht derselbe Name wie mein Ansichtsname (in diesem Fall hieß mein ActionResult Index ()) - Dies ist eigentlich offensichtlich und ein alberner Fehler von meiner Seite, aber ich bin neu in MVC, also werde ich scheitern mit den Grundlagen hier und da.

In meinem Fall musste ich also mein ActionResult so ändern, dass es denselben Namen wie mein View hat: LandingPage.cshtml

    public ActionResult LandingPage()
    {
        ProjectDetailsViewModels PD = new ProjectDetailsViewModels();
        List<ProjectDetail> PDList = new List<ProjectDetail>();

        PDList = GetProductList();
        PD.Projectmodel = PDList;


        return View(PD);
    }

Ich bin neu bei MVC, also hilft das vielleicht jemandem, der neu ist und mit der gleichen Sache zu kämpfen hat, die ich getan habe.

0
AxleWack

Sie können die Startseite in den Eigenschaften Ihres Projekts ändern (Projekt -> Projekteigenschaften). Unter der Registerkarte "Web" können Sie specify page und ändere deine Startseite in home/ oder home/index. Auf diese Weise gelangen Sie entsprechend Ihrer Route zur richtigen Seite. Die Adresse von http: // localhost: 4148/Views/Home/Index.cshtml funktioniert nicht speziell, da sie gemäß Ihren Routen behandelt wird welcher Zustand, dass die URL sein muss http: // localhost: 4148/ {controller}/{action} und ein optionales/{id}.

Wenn Sie mehr über das Routing erfahren möchten, schauen Sie hier .

0
James Santiago