Rumah > pembangunan bahagian belakang > Golang > Pengendali gentian menerima permintaan dengan jenis kandungan yang salah

Pengendali gentian menerima permintaan dengan jenis kandungan yang salah

WBOY
Lepaskan: 2024-02-10 23:51:08
ke hadapan
1264 orang telah melayarinya

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

Fiber ialah sambungan PHP yang cekap untuk membina aplikasi tak segerak, coroutine dan serentak. Pengendalinya boleh menerima permintaan untuk pelbagai jenis kandungan ralat, seperti JSON, XML, dsb. Dengan Fiber, pembangun boleh mengendalikan permintaan dalam format yang berbeza dengan lebih fleksibel dan mengendalikan ralat dengan sewajarnya. Ini membolehkan pembangun mengurus dan menyelenggara aplikasi mereka dengan lebih baik, meningkatkan keteguhan dan kebolehselenggaraan kod. Dalam artikel ini, kami akan mendalami cara Fiber mengendalikan pelbagai jenis ralat permintaan dan memberikan nasihat serta petua berguna untuk pembangun.

Kandungan soalan

Saya menggunakan gentian 2.44.0 和 go 1.20 构建一个简单的 restful api。我目前正在测试是否可以为给定的处理程序强制执行可接受的内容(非常常见的事情),但看起来我做错了什么,或者 fibre.ctx.accepts dan ia tidak berfungsi seperti yang saya jangkakan.

Ini adalah laluan yang sangat mudah yang saya tentukan. Nota ctx.accepts 的用法...但是我使用什么 accept Pengepala http tidak penting, semua permintaan akan lulus.

// 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!")
}
Salin selepas log masuk

Adakah terdapat cara untuk mengelakkan tingkah laku ini dan mengkonfigurasi pengendali/halaan dengan betul?

Penyelesaian

Tandatangan fungsi ini ialah:

func (c *ctx) accepts(offers ...string) string
Salin selepas log masuk

Ia akan mengembalikan petikan yang boleh diterima daripada petikan yang anda berikan kepada fungsi ini. Jika pengepala accept dalam permintaan tidak sepadan dengan mana-mana tawaran, ia akan mengembalikan rentetan kosong (lihat Pelaksanaan). Jadi, jika anda ingin memaksa pengendali tertentu untuk menerima sesuatu yang boleh diterima, anda boleh menyemak sama ada nilai pulangan ialah rentetan kosong:

func RootHandler(ctx *fiber.Ctx) error {
    if offer := ctx.Accepts(fiber.MIMETextPlain, fiber.MIMETextPlainCharsetUTF8); offer == "" {
        return ctx.SendStatus(fiber.StatusNotAcceptable)
    }
    // ...
}
Salin selepas log masuk

Atas ialah kandungan terperinci Pengendali gentian menerima permintaan dengan jenis kandungan yang salah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan