in http/server/operationrequest/operationrequest_helper.go [55:101]
func NewBaseOperationRequest(req *http.Request, region string, opts OperationRequestOptions) (*BaseOperationRequest, error) {
op := &BaseOperationRequest{
Request: req,
Extras: opts.Extras,
}
query := req.URL.Query()
op.APIVersion = query.Get(common.APIVersionKey)
// if the api-version is not present in the URL, return an error
// this is a required parameter for the operation
if op.APIVersion == "" {
return nil, errors.New("no api-version in URI's parameters")
}
op.TargetURI = req.URL.String()
vars := mux.Vars(req)
op.SubscriptionID = vars[common.SubscriptionIDKey]
op.ResourceGroup = vars[common.ResourceGroupKey]
op.ResourceType = vars[common.ResourceProviderKey] + "/" + vars[common.ResourceTypeKey]
op.ResourceName = vars[common.ResourceNameKey]
op.Region = region
body, err := io.ReadAll(req.Body)
if err != nil {
return nil, fmt.Errorf("failed to read HTTP body: %w", err)
}
op.Body = body
op.HttpMethod = req.Method
if currRoute := mux.CurrentRoute(req); currRoute != nil {
op.RouteName = currRoute.GetName()
}
headers := req.Header
op.CorrelationID = headers.Get(common.RequestCorrelationIDHeader)
op.AcceptedLanguage = headers.Get(common.RequestAcceptLanguageHeader)
if opID := headers.Get(common.RequestAcsOperationIDHeader); opID == "" {
op.OperationID = uuid.Must(uuid.NewV4()).String()
} else {
op.OperationID = uuid.Must(uuid.FromString(opID)).String()
}
if opts.Customizer != nil {
if err := opts.Customizer(op.Extras, headers, vars); err != nil {
return nil, err
}
}
standardize(op)
return op, nil
}