Maison > Article > développement back-end > Le gestionnaire de fibre accepte la demande avec un type de contenu incorrect
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.
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!") }
Existe-t-il un moyen d'éviter ce comportement et de configurer correctement le gestionnaire/routage ?
La signature de cette fonction est :
func (c *ctx) accepts(offers ...string) string
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) } // ... }
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!