Added redirect method

This commit is contained in:
Eduard Urbach 2024-03-20 21:17:50 +01:00
parent 50d5659168
commit 084407038c
Signed by: akyoto
GPG Key ID: C874F672B1AF20C0
2 changed files with 13 additions and 0 deletions

View File

@ -16,6 +16,7 @@ type Context interface {
File(string) error File(string) error
Get(string) string Get(string) string
Next() error Next() error
Redirect(int, string) error
Request() Request Request() Request
Response() Response Response() Response
Status(int) Context Status(int) Context
@ -94,6 +95,13 @@ func (ctx *ctx) Response() Response {
return &ctx.response return &ctx.response
} }
// Redirect sets the Location header and writes the headers with the given status code.
func (ctx *ctx) Redirect(code int, url string) error {
ctx.Response().SetHeader("Location", url)
ctx.Status(code)
return nil
}
// Status sets the HTTP status of the response. // Status sets the HTTP status of the response.
func (ctx *ctx) Status(status int) Context { func (ctx *ctx) Status(status int) Context {
ctx.response.WriteHeader(status) ctx.response.WriteHeader(status)

View File

@ -60,6 +60,10 @@ func TestRouter(t *testing.T) {
return ctx.Request().Context().Err() return ctx.Request().Context().Err()
}) })
s.Get("/redirect", func(ctx server.Context) error {
return ctx.Redirect(http.StatusTemporaryRedirect, "/")
})
s.Get("/request/data", func(ctx server.Context) error { s.Get("/request/data", func(ctx server.Context) error {
request := ctx.Request() request := ctx.Request()
method := request.Method() method := request.Method()
@ -124,6 +128,7 @@ func TestRouter(t *testing.T) {
{Method: "GET", URL: "/request/header", Body: "", Status: http.StatusOK, Response: ""}, {Method: "GET", URL: "/request/header", Body: "", Status: http.StatusOK, Response: ""},
{Method: "GET", URL: "/response/header", Body: "", Status: http.StatusOK, Response: "text/plain"}, {Method: "GET", URL: "/response/header", Body: "", Status: http.StatusOK, Response: "text/plain"},
{Method: "GET", URL: "/reader", Body: "", Status: http.StatusOK, Response: "Hello"}, {Method: "GET", URL: "/reader", Body: "", Status: http.StatusOK, Response: "Hello"},
{Method: "GET", URL: "/redirect", Body: "", Status: http.StatusTemporaryRedirect, Response: ""},
{Method: "GET", URL: "/string", Body: "", Status: http.StatusOK, Response: "Hello"}, {Method: "GET", URL: "/string", Body: "", Status: http.StatusOK, Response: "Hello"},
{Method: "GET", URL: "/scheme", Body: "", Status: http.StatusOK, Response: "http"}, {Method: "GET", URL: "/scheme", Body: "", Status: http.StatusOK, Response: "http"},
{Method: "GET", URL: "/write", Body: "", Status: http.StatusOK, Response: "Hello"}, {Method: "GET", URL: "/write", Body: "", Status: http.StatusOK, Response: "Hello"},