Ich habe ein Projekt, für das meine URLs Punkte im Pfad enthalten müssen. Zum Beispiel kann ich eine URL wie www.example.com/people/michael.phelps haben
URLs mit dem Punkt erzeugen eine 404. Mein Routing ist in Ordnung. Wenn ich michaelphelps ohne Punkt übergebe, dann funktioniert alles. Wenn ich den Punkt hinzufüge, erhalte ich einen 404-Fehler. Die Beispielsite wird unter Windows 7 mit IIS8 Express ausgeführt. URLScan wird nicht ausgeführt.
Ich habe versucht, meiner web.config Folgendes hinzuzufügen:
<security>
<requestFiltering allowDoubleEscaping="true"/>
</security>
Leider machte das keinen Unterschied. Ich erhalte gerade den Fehler 404.0 Not Found.
Dies ist ein MVC4-Projekt, aber ich denke nicht, dass dies relevant ist. Mein Routing funktioniert einwandfrei und die von mir erwarteten Parameter sind vorhanden, bis sie einen Punkt enthalten.
Was muss ich konfigurieren, damit meine URL Punkte enthält?
quelle
Antworten:
Ich habe dies durch Bearbeiten der HTTP-Handler meiner Site zum Laufen gebracht. Für meine Bedürfnisse funktioniert dies gut und löst mein Problem.
Ich habe einfach einen neuen HTTP-Handler hinzugefügt, der nach bestimmten Pfadkriterien sucht. Wenn die Anforderung übereinstimmt, wird sie zur Verarbeitung korrekt an .NET gesendet. Ich bin mit dieser Lösung viel glücklicher, dass URLRewrite HackMFAR hackt oder aktiviert.
Wenn .NET beispielsweise die URL www.example.com/people/michael.phelps verarbeiten soll, fügen Sie der web.config Ihrer Site innerhalb des
system.webServer / handlers
Elements die folgende Zeile hinzu :Bearbeiten
Es gibt andere Beiträge, die darauf hinweisen, dass die Lösung für dieses Problem
RAMMFAR
oder istRunAllManagedModulesForAllRequests
. Durch Aktivieren dieser Option werden alle verwalteten Module für alle Anforderungen aktiviert. Das bedeutet, dass statische Dateien wie Bilder, PDFs und alles andere von .NET verarbeitet werden, wenn dies nicht erforderlich ist. Diese Option wird am besten weggelassen, es sei denn, Sie haben einen bestimmten Fall dafür.quelle
Nach einigem Stöbern stellte ich fest, dass entspanntes UrlToFileSystemMapping bei mir überhaupt nicht funktionierte. In meinem Fall wurde RAMMFAR auf true gesetzt. Gleiches gilt für (.net 4.0 + mvc3) und (.net 4.5 + mvc4).
Beachten Sie beim Einstellen von RAMMFAR den wahren Hanselman-Beitrag zu RAMMFAR und Leistung
quelle
Ich glaube, Sie müssen die Eigenschaft entspanntUrlToFileSystemMapping in Ihrer web.config festlegen. Haack hat vor einiger Zeit einen Artikel darüber geschrieben (und es gibt einige andere SO-Beiträge , die die gleichen Arten von Fragen stellen).
Bearbeiten In späteren Kommentaren von .NET / IIS muss dies möglicherweise im
system.WebServer
Element enthalten sein.quelle
Ich habe mich lange mit diesem Thema beschäftigt, nachdem ich all die verschiedenen Mittel ohne Erfolg verfolgt hatte.
Ich habe festgestellt, dass beim Hinzufügen eines Schrägstrichs [/] am Ende der URL mit den Punkten [.] Kein 404-Fehler ausgegeben wurde und tatsächlich funktioniert hat.
Ich habe das Problem schließlich mit einem URL-Rewriter wie IIS URL Rewrite gelöst, um nach einem bestimmten Muster zu suchen und den Trainingsslash anzuhängen.
Meine URL sieht folgendermaßen aus: /Contact/~firstname.lastname, daher lautet mein Muster einfach: /Contact/~(.*[^/‹)$
Ich habe diese Idee von Scott Forsyth erhalten, siehe Link unten: http://weblogs.asp.net/owscott/handing-mvc-paths-with-dots-in-the-path
quelle
Fügen Sie diesen Abschnitt einfach zu Web.config hinzu, und alle Anforderungen an die Route / {* pathInfo} werden vom angegebenen Handler verarbeitet, auch wenn in pathInfo Punkte vorhanden sind. (entnommen aus dem Beispiel von ServiceStack MVC Host Web.config und dieser Antwort https://stackoverflow.com/a/12151501/801189 )
Dies sollte sowohl für IIS 6 als auch für IIS 7 funktionieren. Sie können bestimmten Handlern nach der 'Route' bestimmte Handler zuweisen, indem Sie path = "*" in den 'add'-Elementen ändern
quelle
MVC 5.0-Problemumgehung.
Viele der vorgeschlagenen Antworten scheinen in MVC 5.0 nicht zu funktionieren.
Da das 404-Punkte-Problem im letzten Abschnitt gelöst werden kann, indem dieser Abschnitt mit einem abschließenden Schrägstrich geschlossen wird, ist hier der kleine Trick, den ich verwende, sauber und einfach.
Während Sie einen praktischen Platzhalter im Blick haben:
Fügen Sie ein wenig jquery / javascript hinzu, um die Arbeit zu erledigen:
Bitte beachten Sie den abschließenden Schrägstrich, der für die Änderung verantwortlich ist
in
quelle
Super einfache Antwort für diejenigen, die dies nur auf einer Webseite haben. Bearbeiten Sie Ihren Actionlink und ein + "/" am Ende.
quelle
Vielleicht möchten Sie darüber nachdenken, Bindestriche anstelle von Punkten zu verwenden.
In Pro ASP MVC 3 Framework empfehlen sie Folgendes zum Erstellen benutzerfreundlicher URLs:
Es wird auch erwähnt, dass URLs für Menschen leicht zu lesen und zu ändern sein sollten. Vielleicht kommt ein Grund, über die Verwendung eines Strichs anstelle eines Punktes nachzudenken, auch aus demselben Buch:
Während eine Periode für Menschen noch lesbar ist (obwohl sie weniger lesbar ist als Bindestriche, IMO), kann sie dennoch etwas verwirrend / irreführend sein, je nachdem, was nach der Periode kommt. Was ist, wenn jemand einen Nachnamen von zip hat? Dann lautet die URL /John.zip anstelle von / John-zip, was selbst für den Entwickler, der die Anwendung geschrieben hat, irreführend sein kann.
quelle
.
) durch Bindestriche in seinen Benutzer-URLs: PAbhängig davon, wie wichtig es für Sie ist, Ihren URI ohne Abfrageringe zu halten, können Sie den Wert auch nur mit Punkten als Teil des Abfragerings und nicht als URI übergeben.
ZB funktioniert www.example.com/people?name=michael.phelps, ohne dass Einstellungen oder ähnliches geändert werden müssen.
Sie verlieren die Eleganz eines sauberen URI, aber für diese Lösung müssen keine Einstellungen oder Handler geändert oder hinzugefügt werden.
quelle
Wäre es möglich, Ihre URL-Struktur zu ändern?
Für das, woran ich arbeitete, habe ich eine Route ausprobiert
aber es scheiterte mit allem, was eine hatte. drin.
Ich wechselte die Route zu
Jetzt kann ich einfügen
localhost:xxxxx/File1.doc/Download
und es funktioniert gut.Meine Helfer in der Ansicht haben es ebenfalls aufgegriffen
das macht auch einen Link zum
localhost:xxxxx/File1.doc/Download
Format.Vielleicht könnten Sie ein nicht benötigtes Wort wie "/ view" oder eine Aktion am Ende Ihrer Route einfügen, damit Ihr Eigentum mit einem Nachlauf
/
wie " enden" kann/mike.smith/view
quelle
Es ist so einfach wie das Ändern von path = " ." zu path = " ". Entfernen Sie einfach den Punkt im Pfad für ExensionlessUrlHandler-Integrated-4.0 in web.config.
Hier ist ein schöner Artikel https://weblog.west-wind.com/posts/2015/Nov/13/Serving-URLs-with-File-Extensions-in-an-ASPNET-MVC-Application
quelle
Versuchte alle oben genannten Lösungen, aber keine davon funktionierte für mich. Was funktioniert hat, war, dass ich .NET-Versionen> 4.5 deinstalliert habe, einschließlich aller mehrsprachigen Versionen. Schließlich fügte ich Stück für Stück neuere (nur auf Englisch) Versionen hinzu. Derzeit sind auf meinem System folgende Versionen installiert:
Und es funktioniert immer noch an diesem Punkt. Ich habe Angst, 4.6.2 zu installieren, weil es alles durcheinander bringen könnte.
Ich konnte also nur spekulieren, dass entweder 4.6.2 oder all diese nicht englischen Versionen meine Konfiguration durcheinander brachten.
quelle
Ich konnte meine spezielle Version dieses Problems mithilfe der Lösung unter https://stackoverflow.com/a/13082446/1454265 lösen und den Pfad ersetzen = "*. html".
quelle
Als Lösung könnte auch in Betracht gezogen werden, in ein Format zu codieren, das kein Symbol enthält
.
, wie base64.In js sollte hinzugefügt werden
In der Steuerung
quelle
Hinzufügen einer URL-Rewrite-Regel zum Web.config-Archiv. Das URL Rewrite-Modul muss bereits in IIS installiert sein. Verwenden Sie die folgende Umschreiberegel als Inspiration für Ihre eigenen.
quelle
Überprüfen Sie außerdem (im Zusammenhang) die Reihenfolge Ihrer Handlerzuordnungen. Wir hatten eine .ashx mit einer .svc (zB /foo.asmx/bar.svc/path) im Pfad danach. Die .svc-Zuordnung war zuerst so 404 für den .svc-Pfad, der vor dem .asmx übereinstimmte. Ich habe nicht zu viel darüber nachgedacht, aber vielleicht würde sich die URL, die den Pfad codiert, darum kümmern.
quelle
quelle