Beim Routing von Ressourcen in Rails wird das optionale Formatattribut automatisch an die generierten Routen angehängt. Dies ist so, dass die in Frage stehende Ressource entweder als XML, HTML usw. angefordert werden kann. Welche Formate tatsächlich erlaubt sind, wird normalerweise in der Steuerung unter Verwendung von respond_to
beschrieben.So begrenzen Sie die Ressourcenformate in der Rails-Routendatei
Aber in vielen Fällen möchten Sie nur HTML unterstützen und es fühlt sich an wie ein Overhead, respond_to :html
in jede Aktion in jedem Controller zu schreiben. Es wäre daher cool, wenn es eine Möglichkeit gäbe, erlaubte Inhaltstypen bereits beim Erstellen der Routen in der Datei routes.rb zu begrenzen, z.
Gibt es eine Möglichkeit, dies entweder nativ oder über ein Plugin zu erreichen?
P.S. Der übliche Weg, dies zu umgehen, besteht darin, das Problem einfach zu ignorieren und respond_to
nicht in den Aktionen zu verwenden. Dies beschränkt jedoch nicht die erlaubten Inhaltstypen. Stattdessen wird erwartet, dass für jeden möglichen Inhaltstyp eine Vorlage im Sichtenverzeichnis vorhanden ist. Wenn einer bei Anforderung nicht existiert, löst das System einen HTTP 500-Fehler aus.
Nein, ein 500-Fehler bedeutet, etwas schief gelaufen ist auf dem Server Diese Antwort wird kopiert von meiner vorherigen Antwort
. Wenn ein Inhaltstyp nicht unterstützt wird, handelt es sich nicht um einen Serverfehler - es handelt sich um einen Clientfehler (der Client hätte es nicht anfordern sollen). A 406 wäre der richtige Antwortcode. Siehe "HTTP Response Codes": http://www.sitepoint.com/blogs/2008/02/04/restful-rails-part-i/ –
Sicher, wenn Sie am Ende von .xml oder die URL und dieses Format wird nicht unterstützt, dann sollten Sie 404 nicht gefunden zurückgeben. Es scheint etwas frech zu sein, die Verwendung von conneg zu ignorieren, indem man URLs für jeden Inhaltstyp erstellt, aber dann den Quellcode stiehlt, wenn es keinen gültigen Inhaltstyp im Accept-Header gibt! –
Nun, Sie könnten einen Punkt haben - auch wenn dies tatsächlich so ist, wie Rails out of the box funktioniert. Aber das ist nicht der Punkt meiner Frage. Ich möchte dies immer noch an einer zentralen Stelle angeben (am besten die routes-Datei) - egal, ob dann ein 404 oder ein 406 bei einem Fehler zurückgegeben wird. –