Der Fiber-Handler akzeptiert eine Anfrage mit falschem Inhaltstyp

WBOY
Freigeben: 2024-02-10 23:51:08
nach vorne
1223 Leute haben es durchsucht

Fiber 处理程序接受错误内容类型的请求

Fiber ist eine effiziente PHP-Erweiterung zum Erstellen asynchroner, Coroutine- und gleichzeitiger Anwendungen. Seine Handler können Anfragen für verschiedene Fehlerinhaltstypen wie JSON, XML usw. akzeptieren. Mit Fiber können Entwickler Anfragen in verschiedenen Formaten flexibler bearbeiten und Fehler entsprechend behandeln. Dies ermöglicht Entwicklern eine bessere Verwaltung und Wartung ihrer Anwendungen und verbessert die Robustheit und Wartbarkeit des Codes. In diesem Artikel gehen wir eingehend darauf ein, wie Fiber mit verschiedenen Arten von Anforderungsfehlern umgeht, und geben nützliche Ratschläge und Tipps für Entwickler.

Frageninhalt

Ich verwende Ballaststoffe 2.44.0 和 go 1.20 构建一个简单的 restful api。我目前正在测试是否可以为给定的处理程序强制执行可接受的内容(非常常见的事情),但看起来我做错了什么,或者 fibre.ctx.accepts und es funktioniert nicht genau so, wie ich es erwartet habe.

Dies ist eine sehr einfache Route, die ich definiert habe. Hinweis ctx.accepts 的用法...但是我使用什么 accept HTTP-Header sind nicht wichtig, alle Anfragen werden durchgelassen.

// app.go
func main() {
    config := fiber.Config{
        StrictRouting: true,
    }
    app := fiber.New(config)
    app.Use(logger.New(), recover.New())

    app.Get("/", handlers.RootHandler)

    log.Fatal(app.Listen(":8080"))
}

// ============================================================================

// handlers/handlers.go
func RootHandler(ctx *fiber.Ctx) error {
    ctx.Accepts(fiber.MIMETextPlain, fiber.MIMETextPlainCharsetUTF8)
    ctx.Set(fiber.HeaderContentType, ctx.GetReqHeaders()[fiber.HeaderAccept])
    return ctx.Status(fiber.StatusOK).SendString("Hello, world!")
}
Nach dem Login kopieren

Gibt es eine Möglichkeit, dieses Verhalten zu vermeiden und den Handler/das Routing richtig zu konfigurieren?

Lösung

Die Signatur dieser Funktion lautet:

func (c *ctx) accepts(offers ...string) string
Nach dem Login kopieren

Es werden die akzeptablen Anführungszeichen aus den Anführungszeichen zurückgegeben, die Sie an diese Funktion übergeben haben. Wenn der accept-Header in der Anfrage mit keinem der Angebote übereinstimmt, wird eine leere Zeichenfolge zurückgegeben (siehe Implementierung). Wenn Sie also einen bestimmten Handler zwingen möchten, etwas Akzeptables zu akzeptieren, können Sie einfach prüfen, ob der Rückgabewert ein leerer String ist:

func RootHandler(ctx *fiber.Ctx) error {
    if offer := ctx.Accepts(fiber.MIMETextPlain, fiber.MIMETextPlainCharsetUTF8); offer == "" {
        return ctx.SendStatus(fiber.StatusNotAcceptable)
    }
    // ...
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDer Fiber-Handler akzeptiert eine Anfrage mit falschem Inhaltstyp. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage