remove hardcode instead of http status value (#1411)

This commit is contained in:
田欧 2018-06-26 17:21:32 +08:00 committed by Bo-Yi Wu
parent 1f59bad84b
commit 6c6d97ba2e
6 changed files with 15 additions and 13 deletions

View File

@ -7,6 +7,7 @@ package gin
import ( import (
"crypto/subtle" "crypto/subtle"
"encoding/base64" "encoding/base64"
"net/http"
"strconv" "strconv"
) )
@ -51,7 +52,7 @@ func BasicAuthForRealm(accounts Accounts, realm string) HandlerFunc {
if !found { if !found {
// Credentials doesn't match, we return 401 and abort handlers chain. // Credentials doesn't match, we return 401 and abort handlers chain.
c.Header("WWW-Authenticate", realm) c.Header("WWW-Authenticate", realm)
c.AbortWithStatus(401) c.AbortWithStatus(http.StatusUnauthorized)
return return
} }

View File

@ -474,7 +474,7 @@ func (c *Context) BindQuery(obj interface{}) error {
// See the binding package. // See the binding package.
func (c *Context) MustBindWith(obj interface{}, b binding.Binding) (err error) { func (c *Context) MustBindWith(obj interface{}, b binding.Binding) (err error) {
if err = c.ShouldBindWith(obj, b); err != nil { if err = c.ShouldBindWith(obj, b); err != nil {
c.AbortWithError(400, err).SetType(ErrorTypeBind) c.AbortWithError(http.StatusBadRequest, err).SetType(ErrorTypeBind)
} }
return return
@ -589,9 +589,9 @@ func bodyAllowedForStatus(status int) bool {
switch { switch {
case status >= 100 && status <= 199: case status >= 100 && status <= 199:
return false return false
case status == 204: case status == http.StatusNoContent:
return false return false
case status == 304: case status == http.StatusNotModified:
return false return false
} }
return true return true

12
gin.go
View File

@ -378,14 +378,14 @@ func (engine *Engine) handleHTTPRequest(c *Context) {
if tree.method != httpMethod { if tree.method != httpMethod {
if handlers, _, _ := tree.root.getValue(path, nil, unescape); handlers != nil { if handlers, _, _ := tree.root.getValue(path, nil, unescape); handlers != nil {
c.handlers = engine.allNoMethod c.handlers = engine.allNoMethod
serveError(c, 405, default405Body) serveError(c, http.StatusMethodNotAllowed, default405Body)
return return
} }
} }
} }
} }
c.handlers = engine.allNoRoute c.handlers = engine.allNoRoute
serveError(c, 404, default404Body) serveError(c, http.StatusNotFound, default404Body)
} }
var mimePlain = []string{MIMEPlain} var mimePlain = []string{MIMEPlain}
@ -406,9 +406,9 @@ func serveError(c *Context, code int, defaultMessage []byte) {
func redirectTrailingSlash(c *Context) { func redirectTrailingSlash(c *Context) {
req := c.Request req := c.Request
path := req.URL.Path path := req.URL.Path
code := 301 // Permanent redirect, request with GET method code := http.StatusMovedPermanently // Permanent redirect, request with GET method
if req.Method != "GET" { if req.Method != "GET" {
code = 307 code = http.StatusTemporaryRedirect
} }
if length := len(path); length > 1 && path[length-1] == '/' { if length := len(path); length > 1 && path[length-1] == '/' {
@ -430,9 +430,9 @@ func redirectFixedPath(c *Context, root *node, trailingSlash bool) bool {
trailingSlash, trailingSlash,
) )
if found { if found {
code := 301 // Permanent redirect, request with GET method code := http.StatusMovedPermanently // Permanent redirect, request with GET method
if req.Method != "GET" { if req.Method != "GET" {
code = 307 code = http.StatusTemporaryRedirect
} }
req.URL.Path = string(fixedPath) req.URL.Path = string(fixedPath)
debugPrint("redirecting request %d: %s --> %s", code, path, req.URL.String()) debugPrint("redirecting request %d: %s --> %s", code, path, req.URL.String())

View File

@ -10,6 +10,7 @@ import (
"io" "io"
"io/ioutil" "io/ioutil"
"log" "log"
"net/http"
"net/http/httputil" "net/http/httputil"
"runtime" "runtime"
"time" "time"
@ -41,7 +42,7 @@ func RecoveryWithWriter(out io.Writer) HandlerFunc {
httprequest, _ := httputil.DumpRequest(c.Request, false) httprequest, _ := httputil.DumpRequest(c.Request, false)
logger.Printf("[Recovery] %s panic recovered:\n%s\n%s\n%s%s", timeFormat(time.Now()), string(httprequest), err, stack, reset) logger.Printf("[Recovery] %s panic recovered:\n%s\n%s\n%s%s", timeFormat(time.Now()), string(httprequest), err, stack, reset)
} }
c.AbortWithStatus(500) c.AbortWithStatus(http.StatusInternalServerError)
} }
}() }()
c.Next() c.Next()

View File

@ -13,7 +13,7 @@ import (
const ( const (
noWritten = -1 noWritten = -1
defaultStatus = 200 defaultStatus = http.StatusOK
) )
type responseWriterBase interface { type responseWriterBase interface {

View File

@ -184,7 +184,7 @@ func (group *RouterGroup) createStaticHandler(relativePath string, fs http.FileS
_, nolisting := fs.(*onlyfilesFS) _, nolisting := fs.(*onlyfilesFS)
return func(c *Context) { return func(c *Context) {
if nolisting { if nolisting {
c.Writer.WriteHeader(404) c.Writer.WriteHeader(http.StatusNotFound)
} }
fileServer.ServeHTTP(c.Writer, c.Request) fileServer.ServeHTTP(c.Writer, c.Request)
} }