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 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 // check and validate content type, select consumer if httpkit.CanHaveBody(request.Method) { ct, _, err := httpkit.ContentType(request.Header) if err != nil { res = append(res, err) } else { if err := validateContentType(route.Consumes, ct); err != nil { res = append(res, err) } route.Consumer = route.Consumers[ct] } } // check and validate the response format if len(res) == 0 { if str := httputil.NegotiateContentType(request, route.Produces, ""); 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 { res = append(res, err) } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil }