[go, echo] form에서 put ~ method Over Ride 요청 ~

4292 단어 HTMLGoecho
html의form에서 액션 속성에서 get과post만 얻을 수 있기 때문에delete와put 등을 지정할 수 없습니다.그럼 어떻게 하면 좋을까요? 예를 들면, php에서
<form>
 <input type="hidden" name="_method" value="PATCH">
</form>
만약 쓰면 php 방면에서 할 수 있습니다. 처리하면 패치 방법은 도망갈 수 있습니다.
그러나 고에 똑같이 써도 움직이지 않고 위와 같은 구조를 스스로 만들어야 한다.
그렇다면 어떻게 해야 할지 루트의 프로세스가 달리기 전에 처리해야 할middleware를 준비해야 합니다.다음은 golang의 echo를 사용하지만 프레임워크를 사용하지 않아도 거의 같습니다.
우선, main 함수에서 아래와 같이 MethodOverride를 읽습니다.
e.Pre(controllers.MethodOverride)
이렇게 하면 라우터가 달리기 전에 먼저 이동할 수 있다.나는 처음에는 e.Use에서도 움직일 줄 알았는데 움직이지 않고 쌓였다.공식적으로도 method Over Ride에 e.Pre를 사용한다고 쓰여 있다.

문서 레지스트리에 항목을 추가합니다.
func MethodOverride(next echo.HandlerFunc) echo.HandlerFunc {
    return func(c echo.Context) error {
        if c.Request().Method == "POST" {
            method := c.Request().PostFormValue("_method")
            if method == "PUT" || method == "PATCH" || method == "DELETE" {
                c.Request().Method = method
            }
        }
        fmt.Println(c.Request())
        return next(c)
    }
}
즉, 포스트 방법이 이동할 때if 이하를 처리한다.method에 자신이 사용하고 싶은 httpmethod(put,delete,patch 등)를 입력하고request의method를 다시 씁니다.그런 다음 다음 다음 함수를 입력하여 호출합니다.
adminGroup.PATCH("/update", controllers.UpdateAdminUser)
여기서 마치겠습니다.
이 글에는 표준 포장만 사용하는 같은 방법이 쓰여 있다.
https://www.alexedwards.net/blog/http-method-spoofing

좋은 웹페이지 즐겨찾기