/// <summary> /// Generate the statements for sending a HttpRequestMessage. /// </summary> /// <returns><see cref="LocalDeclarationStatementSyntax"/> statement.</returns> /// <remarks> /// var response = await httpClient.SendAsync(request); /// </remarks> private LocalDeclarationStatementSyntax CreateSendStatement() { var invocationExpressionSyntax = RoslynExtensions.CreateInvocationExpression( HttpClientVariableName, "SendAsync", SyntaxFactory.Argument(SyntaxFactory.IdentifierName(RequestVariableName))); var awaitExpression = SyntaxFactory.AwaitExpression(invocationExpressionSyntax); var declarationSyntax = RoslynExtensions.CreateVariableInitializationExpression("response", awaitExpression); return(SyntaxFactory.LocalDeclarationStatement(declarationSyntax)); }
/// <summary> /// Generate the statements for HttpClient handler configuration. /// </summary> /// <param name="curlOptions">The curl options.</param> /// <param name="result">The result.</param> /// <returns>Collection of <see cref="MemberDeclarationSyntax" />.</returns> /// <remarks> /// var handler = new HttpClientHandler(); /// handler.UseCookies = false; /// </remarks> private IEnumerable <MemberDeclarationSyntax> ConfigureHandlerStatements( CurlOptions curlOptions, ConvertResult <string> result) { var statementSyntaxs = new LinkedList <MemberDeclarationSyntax>(); var handlerInitialization = RoslynExtensions.CreateVariableInitializationExpression( HandlerVariableName, RoslynExtensions.CreateObjectCreationExpression(nameof(HttpClientHandler))); statementSyntaxs.AddLast( SyntaxFactory.GlobalStatement(SyntaxFactory.LocalDeclarationStatement(handlerInitialization))); if (curlOptions.HasCookies) { var memberAssignmentExpression = RoslynExtensions.CreateMemberAssignmentExpression( HandlerVariableName, "UseCookies", SyntaxFactory.LiteralExpression(SyntaxKind.FalseLiteralExpression)); statementSyntaxs.AddLast( SyntaxFactory.GlobalStatement(SyntaxFactory.ExpressionStatement(memberAssignmentExpression))); } if (curlOptions.HasProxy) { if (IsSupportedProxy(curlOptions.ProxyUri)) { var memberAssignmentExpression = RoslynExtensions.CreateMemberAssignmentExpression( HandlerVariableName, "Proxy", RoslynExtensions.CreateObjectCreationExpression("WebProxy", RoslynExtensions.CreateStringLiteralArgument(curlOptions.ProxyUri.ToString()))); statementSyntaxs.AddLast( SyntaxFactory.GlobalStatement(SyntaxFactory.ExpressionStatement(memberAssignmentExpression))); } else { result.Warnings.Add($"Proxy scheme \"{curlOptions.ProxyUri.Scheme}\" is not supported"); } } statementSyntaxs.TryAppendWhiteSpaceAtEnd(); return(statementSyntaxs); }
/// <summary> /// Generates the basic authorization encoding statement. /// </summary> /// <param name="options">The options.</param> /// <returns><see cref="LocalDeclarationStatementSyntax"/> statement.</returns> /// <remarks> /// var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("username:password")); /// </remarks> private LocalDeclarationStatementSyntax CreateBasicAuthorizationEncodingStatement(CurlOptions options) { var asciiGetBytesInvocation = RoslynExtensions.CreateInvocationExpression( "Encoding", "ASCII", "GetBytes", RoslynExtensions.CreateStringLiteralArgument(options.UserPasswordPair)); var convertToBase64Invocation = RoslynExtensions.CreateInvocationExpression( "Convert", "ToBase64String", SyntaxFactory.Argument(asciiGetBytesInvocation)); var declarationSyntax = RoslynExtensions.CreateVariableInitializationExpression( Base64AuthorizationVariableName, convertToBase64Invocation); return(SyntaxFactory.LocalDeclarationStatement(declarationSyntax)); }
private IEnumerable <MemberDeclarationSyntax> ConfigureHandlerStatements(CurlOptions curlOptions) { var statementSyntaxs = new LinkedList <MemberDeclarationSyntax>(); var handlerInitialization = RoslynExtensions.CreateVariableInitializationExpression( HandlerVariableName, RoslynExtensions.CreateObjectCreationExpression(nameof(HttpClientHandler))); statementSyntaxs.AddLast( SyntaxFactory.GlobalStatement(SyntaxFactory.LocalDeclarationStatement(handlerInitialization))); if (curlOptions.HasCookies) { var memberAssignmentExpression = RoslynExtensions.CreateMemberAssignmentExpression( HandlerVariableName, "UseCookies", SyntaxFactory.LiteralExpression(SyntaxKind.FalseLiteralExpression)); statementSyntaxs.AddLast( SyntaxFactory.GlobalStatement(SyntaxFactory.ExpressionStatement(memberAssignmentExpression)) .AppendWhiteSpace()); } return(statementSyntaxs); }
/// <summary> /// Generates the multipart content statements. /// </summary> /// <param name="curlOptions">The curl options.</param> /// <returns>Collection of <see cref="StatementSyntax"/>.</returns> /// <remarks> /// var multipartContent = new MultipartFormDataContent(); /// multipartContent.Add(new StringContent("John"), "name"); /// multipartContent.Add(new ByteArrayContent(File.ReadAllBytes("D:\\text.txt")), "shoesize", Path.GetFileName("D:\\text.txt")); /// request.Content = multipartContent; /// </remarks> private IEnumerable <StatementSyntax> CreateMultipartContentStatements(CurlOptions curlOptions) { var statements = new LinkedList <StatementSyntax>(); const string MultipartVariableName = "multipartContent"; const string MultipartAddMethodName = "Add"; statements.AddLast( SyntaxFactory.LocalDeclarationStatement( RoslynExtensions.CreateVariableFromNewObjectExpression( MultipartVariableName, nameof(MultipartFormDataContent)))); int fileCounter = 1; foreach (var data in curlOptions.FormData) { StatementSyntax addStatement; if (data.Type == UploadDataType.Inline) { var contentExpression = RoslynExtensions.CreateObjectCreationExpression( nameof(StringContent), RoslynExtensions.CreateStringLiteralArgument(data.Content)); addStatement = SyntaxFactory.ExpressionStatement( RoslynExtensions.CreateInvocationExpression( MultipartVariableName, MultipartAddMethodName, SyntaxFactory.Argument(contentExpression), RoslynExtensions.CreateStringLiteralArgument(data.Name))); } else if (data.Type == UploadDataType.BinaryFile) { var getFileNameArgument = string.IsNullOrEmpty(data.FileName) ? SyntaxFactory.Argument( RoslynExtensions.CreateInvocationExpression( nameof(Path), nameof(Path.GetFileName), RoslynExtensions.CreateStringLiteralArgument(data.Content))) : RoslynExtensions.CreateStringLiteralArgument(data.FileName); // If the file has content type, we should add it to ByteArrayContent headers var contentExpression = CreateNewByteArrayContentExpression(data.Content); ExpressionSyntax contentArgumentExpression; if (string.IsNullOrEmpty(data.ContentType)) { contentArgumentExpression = contentExpression; } else { var byteArrayVariableName = "file" + fileCounter; var byteArrayContentInitialization = RoslynExtensions.CreateVariableInitializationExpression(byteArrayVariableName, contentExpression); statements.AddLast(SyntaxFactory.LocalDeclarationStatement(byteArrayContentInitialization)); statements.AddLast( SyntaxFactory.ExpressionStatement( RoslynExtensions.CreateInvocationExpression( byteArrayVariableName, "Headers", "Add", RoslynExtensions.CreateStringLiteralArgument("Content-Type"), RoslynExtensions.CreateStringLiteralArgument(data.ContentType)))); contentArgumentExpression = SyntaxFactory.IdentifierName(byteArrayVariableName); } addStatement = SyntaxFactory.ExpressionStatement( RoslynExtensions.CreateInvocationExpression( MultipartVariableName, MultipartAddMethodName, SyntaxFactory.Argument(contentArgumentExpression), RoslynExtensions.CreateStringLiteralArgument(data.Name), getFileNameArgument)); } else { var contentExpression = RoslynExtensions.CreateObjectCreationExpression( nameof(StringContent), SyntaxFactory.Argument(CreateFileReadAllTextExpression(data.Content))); addStatement = SyntaxFactory.ExpressionStatement( RoslynExtensions.CreateInvocationExpression( MultipartVariableName, MultipartAddMethodName, SyntaxFactory.Argument(contentExpression), RoslynExtensions.CreateStringLiteralArgument(data.Name))); } statements.AddLast(addStatement); } statements.AddLast(SyntaxFactory.ExpressionStatement( RoslynExtensions.CreateMemberAssignmentExpression( RequestVariableName, RequestContentPropertyName, SyntaxFactory.IdentifierName(MultipartVariableName)))); statements.TryAppendWhiteSpaceAtEnd(); return(statements); }