Unterschiedliche Fehler für unterschiedliche Pipelines rendern (: api und: browser)?


xji

In meinem aktuellen Phoenix-Projekt habe ich sowohl eine :browserPipeline als auch eine :apiPipeline. Ich möchte für jede Pipeline unterschiedliche Fehlermeldungen rendern. Ich bin mir jedoch nicht sicher, wie ich es erreichen soll.

Mein router.exist wie:

  scope "/api", AppWeb do
    pipe_through(:api)
    # ...
  end

  scope "/admin", AppWeb do
    pipe_through :browser
    # ...
  end

Ich möchte, dass alle Anforderungen an nicht vorhandene Routen unter /admineine HTTP-Fehlervorlage rendern, aber alle Anforderungen an eine andere Route, um eine JSON-Fehlervorlage zu rendern.

In config.exshabe ich

render_errors: [view: AppWeb.ErrorView, accepts: ~w(json html)]

Ich bin mir jedoch nicht sicher, wie ich mit der Fehleransicht fortfahren soll.

Es scheint, dass die template_not_found/2Funktion automatisch aufgerufen wird, wenn ein Routing-Fehler auftritt. Diese Funktion hat jedoch kein connArgument. Ihre Argumente sind templateund assigns.

Sollte ich versuchen, die zu überprüfen assigns, um festzustellen, auf welche Route die eingehende Anforderung zugreifen wollte? Der Versuch, die Vorlage zu überprüfen, schien nicht hilfreich zu sein, und die Vorlage, die versucht wurde, gerendert zu werden, scheint mit einer .htmlErweiterung zu enden , selbst wenn ich versuche, eine Route unter zu besuchen /api.

xji

Wie @ JoséValim betonte, habe ich JSON-Fehlermeldungen nicht richtig gesehen, weil ich die Seiten über einen Browser besucht habe. Wenn ich den Header Accept: application/jsonin meiner Anfrage richtig gesetzt habe, hat es funktioniert.

In der template_not_foundFunktion in error_view.exscheint es zu genügen, nur zu schreiben Phoenix.Controller.status_message_from_template(template).

Verwandte Artikel


Unterschiedliche Spracheinstellungen für Website und API

Soroush Parsa Ich habe eine Bewerbung mit zwei Sprachen, Farsi und Englisch. Diese Anwendung bietet eine Website, die Django-Vorlagen und eine einfache API mit zwei Endpunkten verwendet, die reines Django verwenden. Jetzt stehe ich vor einem Problem, das ich n

Unterschiedliche API-Funktionen für unterschiedliche Rollen

Alexey Korsakov Ich habe API mit asp.net Core 2.1. Anspruchsbasierte Authentifizierung. Ist es möglich, diese beiden API-Funktionen in einer zu kombinieren? [Authorize(Roles = "Admin")] [HttpPost("delete")] public IActionResult Delete([FromBody]Item item) {

Unterschiedliche Modellanforderungen für POST und PUT

Boxiom Angenommen, ich habe einen Controller CatControllermit Aktionen für GET, POST und PUT. Sie alle verwenden dieselbe CatRessource, die folgendermaßen aussehen könnte: public class CatDto { public int Id { get; set; } [Required] public string Name {

Unterschiedliche Signaturen für Array und Objekttyp

Supamiu Ich möchte in der Lage sein, den gleichen Funktionsnamen für zwei Implementierungen zu haben, abhängig vom Typ des Parameters (oder der Art der der Funktion zugewiesenen Generizität). Das Hauptziel dahinter ist, eine deserializeMethode auf einem Serial