func NewBaseOperationRequest()

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
}