Heim >Backend-Entwicklung >Golang >Der Fiber-Handler akzeptiert eine Anfrage mit falschem Inhaltstyp

Der Fiber-Handler akzeptiert eine Anfrage mit falschem Inhaltstyp

WBOY
WBOYnach vorne
2024-02-10 23:51:081235Durchsuche

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!")
}

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

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)
    }
    // ...
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen