beegoフレームワーク学習フィルタ(restfulリクエストの実装)
フィルタ
beegoでrestfulルーティングをするとき、GTE、POST以外のHTTPリクエスト、例えばPUT、PATCH、deleteリクエストはルーティング認証に合格できず、エラー:405 METHOD NOT ALLOWと遭遇した.公式サイトを参考にしてみると、自分のフィルタでHTTPリクエスト方式を変更できることがわかりました.
例えばフロントエンドJQUERY ajaxがDELETEリクエストを送信する
beegoはrestfulルーティングをサポートしていますが、直接リクエストはリクエストに通じず、フィルタ処理が必要です.
ファイルmain.go
package main
......
func init(){//フォーム偽造PUT,DELETE,PATCH,OPTIONSリクエストbeego.InsertFilter("*",beego.BeforeRouter,handlers.RestfulHandler()}をサポート
func main() { ...... beego.Run() }
これによりフィルタが構築され、_methodのリクエスト方式はリクエストヘッダに直接付与される.
ファイル/beego_admin_template/handlers/restfulHandler.go
フィルタの役割
フィルタ個人は、ミドルウェアと同様に、ビジネスロジックを処理する前に、検証の要求、権限認証、強制ジャンプなど、必要な処理を行うことができると考えています.前回beegoの検証コード処理でこのようなコードが見られました
これは、ベリファイコードピクチャに特化する処理であり、beegoルーティング処理の前にcptを用いることを示す.Handlerメソッドは検証コードピクチャを処理する.
公式サイトの具体的な使い方は参考になりますhttps://beego.me/docs/mvc/controller/filter.md
転載先:https://www.cnblogs.com/zhouqi666/p/11048541.html
beegoでrestfulルーティングをするとき、GTE、POST以外のHTTPリクエスト、例えばPUT、PATCH、deleteリクエストはルーティング認証に合格できず、エラー:405 METHOD NOT ALLOWと遭遇した.公式サイトを参考にしてみると、自分のフィルタでHTTPリクエスト方式を変更できることがわかりました.
例えばフロントエンドJQUERY ajaxがDELETEリクエストを送信する
$.post(url, {id:id, _method:"DELETE", _xsrf:xsrf_token}, function (data) {
processAjaxReturnData(data)
});
beegoはrestfulルーティングをサポートしていますが、直接リクエストはリクエストに通じず、フィルタ処理が必要です.
ファイルmain.go
package main
......
func init(){//フォーム偽造PUT,DELETE,PATCH,OPTIONSリクエストbeego.InsertFilter("*",beego.BeforeRouter,handlers.RestfulHandler()}をサポート
func main() { ...... beego.Run() }
これによりフィルタが構築され、_methodのリクエスト方式はリクエストヘッダに直接付与される.
ファイル/beego_admin_template/handlers/restfulHandler.go
package handlers
import (
"github.com/astaxie/beego/context"
)
var supportMethod = [6]string{"GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"}
// restful http
// _method = "DELETE" http POST DELETE
func RestfulHandler() func(ctx *context.Context) {
var restfulHandler = func(ctx *context.Context) {
//
requestMethod := ctx.Input.Query("_method")
if requestMethod == ""{
//
requestMethod = ctx.Input.Method()
}
//
flag := false
for _, method := range supportMethod{
if method == requestMethod {
flag = true
break
}
}
//
if flag == false {
ctx.ResponseWriter.WriteHeader(405)
ctx.Output.Body([]byte("Method Not Allow"))
return
}
//
if requestMethod != "" && ctx.Input.IsPost() {
ctx.Request.Method = requestMethod
}
}
return restfulHandler
}
フィルタの役割
フィルタ個人は、ミドルウェアと同様に、ビジネスロジックを処理する前に、検証の要求、権限認証、強制ジャンプなど、必要な処理を行うことができると考えています.前回beegoの検証コード処理でこのようなコードが見られました
// create filter for serve captcha image
beego.InsertFilter(cpt.URLPrefix+"*", beego.BeforeRouter, cpt.Handler)
これは、ベリファイコードピクチャに特化する処理であり、beegoルーティング処理の前にcptを用いることを示す.Handlerメソッドは検証コードピクチャを処理する.
公式サイトの具体的な使い方は参考になりますhttps://beego.me/docs/mvc/controller/filter.md
転載先:https://www.cnblogs.com/zhouqi666/p/11048541.html