2017-03-17 4 views
-1

Für eine lange Zeit zu arbeiten, ich habe eine Aktion durchgeführt hat, dieWarum RedirectToAction zurückkehrt („/ Index“) Arbeit und RedirectToAction („Index)“ nicht

zurück
return RedirectToAction("Index","Vendor"); 

und es funktionierte wie erwartet. Nach Beendigung dieser Funktion wurde meine Indexfunktion aufgerufen.

In letzter Zeit hörte es jedoch auf zu arbeiten. Das gleiche Codezeile leitet jetzt den Browser auf die URL localhost:67676/Vendor/, meine Index() Aktion aufgerufen wird nie und die Seite wird angezeigt:

HTTP-Fehler 403.14 - Verboten

Der Web-Server nicht auflisten, den Inhalt so konfiguriert ist, dieses Verzeichnisses.

Wenn ich jedoch einen Schrägstrich auf die Verfahrensparameter hinzufügen, wie

return RedirectToAction("/Index","Vendor"); 

Alles funktioniert wie erwartet und die Index-Funktion aufgerufen wird.

Jede Idee, warum ich brauche "/Index" jetzt zu verwenden, aber "Index" arbeitete vor

+0

Haben Sie einen Ordner zu Ihrer App namens 'Vendor' hinzugefügt? –

+0

Ja natürlich. Weißt du warum ("/ Index") funktioniert aber ("Index") nicht? – user111

+1

Dann nehme ich an, dass bedeutet, dass Sie einen Ordner namens 'Vendor' haben (was das Problem ist - benennen Sie es einfach in etwas anderes um und es wird gut funktionieren). Wie Sie in der Nachricht erfahren, leitet Ihre URL in einen Ordner und nicht in eine Controller-Methode um. –

Antwort

1

Der Fehler bedeutet, dass Sie einen Ordner in Ihrer App mit dem Namen Vendor und die URL versucht, in diesem Ordner zu navigieren, anstatt Ihre VendorController. Um das Problem zu lösen, benennen Sie den Ordner so um, dass er keinem Controller-Namen entspricht.

Um zu verstehen, was hinter den Kulissen geschieht,

return RedirectToAction("Index","Vendor"); sieht intern auf Ihrer Route Definitionen für ein Spiel, und es entspricht Ihre Standardroute, die defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } hat. Da Sie als Controller den Wert "Vendor" übergeben, der nicht dem Standard entspricht, wird das erste Segment der URL Vendor. Und weil Sie als Aktion die "Index" übergeben, entspricht es der Route, so dass kein zusätzliches Segment hinzugefügt wird (es ist nicht erforderlich). Die letzte URL wird localhost:67676/Vendor, die Ihrem Ordner entspricht (daher der Fehler).

Wenn Sie verwendet return RedirectToAction("/Index","Vendor");, Ihre Weitergabe "/Index", die nicht die Standardaktion überein ("/Index" != "Index") so erzeugt sie ein zweites Segment in der URL, die nun localhost:67676/Vendor/Index wird, die den Controller getroffen werden, weil Sie nicht (und konnte es nicht) Haben Sie einen Ordner mit dem Namen "Vendor/Index"

Verwandte Themen