private MethodDeclarationSyntax actionDeclaration(AppApiGroupTemplate group, AppApiActionTemplate action) { if (action.IsRedirect()) { return(actionDeclarationForRedirect(group, action)); } if (action.IsView() || action.IsPartialView()) { return(actionDeclarationForView(group, action)); } return(actionDeclarationForPost(group, action)); }
private MethodDeclarationSyntax actionDeclarationForView(AppApiGroupTemplate group, AppApiActionTemplate action) { var actionDeclaration = MethodDeclaration ( GenericName(Identifier("Task")) .WithTypeArgumentList ( TypeArgumentList ( SingletonSeparatedList <TypeSyntax> ( IdentifierName("IActionResult") ) ) ), Identifier(action.Name) ) .WithModifiers ( TokenList ( new[] { Token(SyntaxKind.PublicKeyword), Token(SyntaxKind.AsyncKeyword) } ) ) .WithBody ( Block ( LocalDeclarationStatement ( VariableDeclaration(IdentifierName("var")) .WithVariables ( SingletonSeparatedList ( VariableDeclarator(Identifier("result")) .WithInitializer ( EqualsValueClause ( AwaitExpression ( executeInvocationExpression(group, action) ) ) ) ) ) ), ReturnStatement ( InvocationExpression(IdentifierName(action.IsView() ? "View" : "PartialView")) .WithArgumentList ( ArgumentList ( SingletonSeparatedList ( Argument ( MemberAccessExpression ( SyntaxKind.SimpleMemberAccessExpression, MemberAccessExpression ( SyntaxKind.SimpleMemberAccessExpression, IdentifierName("result"), IdentifierName("Data") ), IdentifierName("ViewName") ) ) ) ) ) ) ) ); if (!action.HasEmptyModel()) { actionDeclaration = actionDeclaration .WithParameterList ( ParameterList ( SingletonSeparatedList ( Parameter(Identifier("model")) .WithType(typeSyntax(action.ModelTemplate)) ) ) ); } if (action.IsPartialView()) { actionDeclaration = actionDeclaration .WithAttributeLists ( SingletonList ( AttributeList ( SingletonSeparatedList ( Attribute(IdentifierName("ResponseCache")) .WithArgumentList ( AttributeArgumentList ( SingletonSeparatedList ( AttributeArgument ( LiteralExpression ( SyntaxKind.StringLiteralExpression, Literal("Default") ) ) .WithNameEquals ( NameEquals(IdentifierName("CacheProfileName")) ) ) ) ) ) ) ) ); } return(actionDeclaration); }