Maison > développement back-end > Golang > Le gestionnaire de fibre accepte la demande avec un type de contenu incorrect

Le gestionnaire de fibre accepte la demande avec un type de contenu incorrect

WBOY
Libérer: 2024-02-10 23:51:08
avant
1255 Les gens l'ont consulté

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

Fiber est une extension PHP efficace pour créer des applications asynchrones, coroutines et simultanées. Ses gestionnaires peuvent accepter des requêtes avec différents types de contenu d'erreur, tels que JSON, XML, etc. Avec Fiber, les développeurs peuvent gérer de manière plus flexible les demandes dans différents formats et gérer les erreurs en conséquence. Cela permet aux développeurs de mieux gérer et maintenir leurs applications, améliorant ainsi la robustesse et la maintenabilité du code. Dans cet article, nous examinerons en profondeur la manière dont Fiber gère différents types d'erreurs de requête et fournirons des conseils et astuces utiles aux développeurs.

Contenu de la question

J'utilise la fibre 2.44.0 和 go 1.20 构建一个简单的 restful api。我目前正在测试是否可以为给定的处理程序强制执行可接受的内容(非常常见的事情),但看起来我做错了什么,或者 fibre.ctx.accepts et elle ne fonctionne pas exactement comme je l'espérais.

C'est un parcours très simple que j'ai défini. Remarque ctx.accepts 的用法...但是我使用什么 accept Les en-têtes http ne sont pas importants, toutes les demandes seront acceptées.

// 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!")
}
Copier après la connexion

Existe-t-il un moyen d'éviter ce comportement et de configurer correctement le gestionnaire/routage ?

Solution

La signature de cette fonction est :

func (c *ctx) accepts(offers ...string) string
Copier après la connexion

Il renverra les citations acceptables parmi les citations que vous avez transmises à cette fonction. Si l'en-tête accept de la requête ne correspond à aucune des offres, il renverra une chaîne vide (voir Implémentation). Donc si vous souhaitez forcer un gestionnaire donné à accepter quelque chose d'acceptable, vous pouvez simplement vérifier si la valeur de retour est une chaîne vide :

func RootHandler(ctx *fiber.Ctx) error {
    if offer := ctx.Accepts(fiber.MIMETextPlain, fiber.MIMETextPlainCharsetUTF8); offer == "" {
        return ctx.SendStatus(fiber.StatusNotAcceptable)
    }
    // ...
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal