func (v *validation) contentType() { if httpkit.CanHaveBody(v.request.Method) { ct, _, err := v.context.ContentType(v.request) if err != nil { v.result = append(v.result, err) } else if httpkit.NeedsContentType(v.request.Method) { if err := validateContentType(v.route.Consumes, ct); err != nil { v.result = append(v.result, err) } v.route.Consumer = v.route.Consumers[ct] } } }
// BindValidRequest binds a params object to a request but only when the request is valid // if the request is not valid an error will be returned func (c *Context) BindValidRequest(request *http.Request, route *MatchedRoute, binder RequestBinder) error { var res []error requestContentType := "*/*" // check and validate content type, select consumer if httpkit.CanHaveBody(request.Method) { ct, _, err := httpkit.ContentType(request.Header, httpkit.IsDelete(request.Method)) if err != nil { res = append(res, err) } else { if err := validateContentType(route.Consumes, ct); err != nil { res = append(res, err) } cons, ok := route.Consumers[ct] if !ok { res = append(res, err) } else { route.Consumer = cons requestContentType = ct } } } // check and validate the response format if len(res) == 0 && httpkit.NeedsContentType(request.Method) { if str := NegotiateContentType(request, route.Produces, requestContentType); str == "" { res = append(res, errors.InvalidResponseFormat(request.Header.Get(httpkit.HeaderAccept), route.Produces)) } } // now bind the request with the provided binder // it's assumed the binder will also validate the request and return an error if the // request is invalid if binder != nil && len(res) == 0 { if err := binder.BindRequest(request, route); err != nil { return err } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil }
func (v *validation) responseFormat() { if str := v.context.ResponseFormat(v.request, v.route.Produces); str == "" && httpkit.NeedsContentType(v.request.Method) { v.result = append(v.result, errors.InvalidResponseFormat(v.request.Header.Get(httpkit.HeaderAccept), v.route.Produces)) } }