IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

Angular6 et Controller en Core.NET


Sujet :

Dotnet

  1. #1
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut Angular6 et Controller en Core.NET
    Bonjour,

    Je suis en train de porter une application WebForms en AngularJS.

    J'ai opté pour Angular6.

    Contexte :

    Je me suis basé sur cet article pour créer mon projet Angular dans Visual Studio :
    http://www.talkingdotnet.com/how-to-...l-studio-2017/

    J'ai dans un premier temps suivi le tutorial d'Angular afin de me familiariser un petit peut avec le fonctionnement d'Angular :
    https://angular.io/tutorial

    Et j'ai adapté avec plus ou moins de succès le code du projet exemple de Microsoft pour interfacer Angular2 avec SQL Server (malheureusement l'exemple n'est pas à jour et j'ai pas mal galéré pour obtenir quelque chose de fonctionne) :
    https://github.com/Microsoft/sql-ser...tour-of-heroes

    Au final, j'ai quelque chose qui fonctionne pas trop mal.

    J'ai même réussi à le faire tourner sous Linux avec un SQL Server hébergé dessus. Le truc inespéré.

    Maintenant, il est temps de transposer mon projet WebForms à cette nouvelle techno qui est très nouvelle pour moi.
    Et là ça se corse.

    Avant toute chose, je dois gérer la connexion à l'application et à la base de données.

    Mon application utilise des login SQL Server pour fonctionner.
    Ainsi, lorsque l'utilisateur saisit sont login/pass, c'est celui de SQL Server directement.
    Ceci a pour principal avantage de blinder au maximum la sécurité, puisque l'utilisateur ne peut en aucun cas accéder à des données ou faire des opérations pour lesquelles sont login n'est pas expressément autorisé au niveau de la base de données.

    Cependant, dans l'exemple de Microsoft, on utilise une notion de "transcient" pour n'avoir à gérer la connexion à la base qu'au startup.
    Ceci ne me convient pas, puisque chaque appel à un contrôleur doit se faire avec le login de l'utilisateur connecté : donc pas de connexion partagée entre tout le monde.

    Aussi, je dois me débrouiller pour conserver d'une manière ou d'une autre une info pesistante pour ne pas avoir à me trimbaler le user/pass de la base de données à chaque appel à mon contrôleur : une fois l'utilisateur connecté, il faut que je puisse conserver cette info au niveau de la base de données.
    Jusqu'à présent, j'utilisais une variable de session "de contexte" (qui contenait tout ce dont j'avais besoin pendant toute la durée de la visite de l'utilisateur).

    Mais là avec Angular j'ai pas le choix : tout se passe côté client.
    Est-ce possible de gérer des sessions côté contrôleur ?
    Comment ça marche ?

    J'avoue que :
    1/ L'appel des contrôleurs depuis Angular me laisse un peu perplexe (notamment le fait de ne pas appeler explicitement une méthode et se limiter aux verbes HTTP me déroute complètement)
    2/ Je ne trouve aucune littérature/tuto permettant d'expliquer le fonctionnement d'un contrôleur .NET à partir d'Angular et notamment comment gérer des informations persistantes côté serveur


    Voici notamment un extrait de mon "Startup.cs" :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                string ConnString = Configuration["ConnectionStrings:Plannix"];
                /*
                services.AddTransient<IQueryPipe>(_ => new QueryPipe(new SqlConnection(ConnString)));
                services.AddTransient<ICommand>(_ => new Command(new SqlConnection(ConnString)));
                */
                services.AddTransient<string>(_ => ConnString);
     
                services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            }
    En commentaire, les éléments du tuto de Microsoft. J'ai remplacé les objets QueryPipe et Command par la chaîne de connexion brute.

    Que veut dire "transcient" : c'est partagé pour la session de l'utilisateur ? Pour tous les utilisateurs ? C'est simplement exécuté à chaque appel mais des paramètres implicites aux contrôleurs ?
    A quoi sert le "AddMvc" ? J'en ai vraiment besoin ? (sâchant que 100% des mes contrôleurs ne feront que des appels à des procédures stockées et renverrons le résultat JSON produit par SQL Server, sans aucune autre intelligence).

    Et voici le constructeur de mon contrôleur des "héros" modifié :

    Avant :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            public HeroesController(string cnxString)
            {
                this.SqlCommand = new Command(new SqlConnection(cnxString));
                this.SqlPipe = new QueryPipe(new SqlConnection(cnxString));
            }

    Après :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                this.SqlCommand = new Command(new SqlConnection(cnxString));
                this.SqlPipe = new QueryPipe(new SqlConnection(cnxString));

    Le but du jeu étant maintenant de trouver comment régupérer un "login/pass" persitant d'un appel à l'autre, mais dans le périmètre de l'utilisateur connecté seulement...
    On ne jouit bien que de ce qu’on partage.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2015
    Messages : 19
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    Pour éviter l'amalgame angular != angularjs. Ce sont des frameworks complètement différents, j'avoue que le nom peut prêter à confusion.

    Le schéma classique est d'avoir une api rest en asp.net core pour le back et un front en Angular. L'api est censé rester "stateless" donc elle ne doit pas y avoir de session pour le client coté serveur. L'application front peut gérer ses sessions à l'aide du localstorage et sessionstorage.

    Pour l'authentification il y a ASP.NET Core Identity que je trouve complète.

    AddTransient sert à injecter un service ou un objet quelconque avec une portée Request. Voici un lien qui explique l'injection des dépendances https://dotnetcoretutorials.com/2017...mes-explained/

Discussions similaires

  1. Réaliser un web tab control sous asp.net 1.1
    Par ouadie99 dans le forum ASP.NET
    Réponses: 0
    Dernier message: 19/02/2009, 17h43
  2. Utiliser le data control en vb.net ?
    Par GriffinK dans le forum Windows Forms
    Réponses: 1
    Dernier message: 24/02/2008, 11h53
  3. configuration du grid control sous vb.net 2003
    Par bulmish dans le forum Windows Forms
    Réponses: 5
    Dernier message: 18/01/2008, 12h21
  4. Réponses: 3
    Dernier message: 24/07/2007, 14h06
  5. control [openfiledialog] (asp.net)
    Par tsdia2 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 12/04/2007, 19h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo