HtmlToText
blog .net de thomas levesque search primary menu skip to content a propos search for: uncategorized fin de mon blog en français april 17, 2018 thomas levesque 2 comments chers lecteurs, j’ai créé ce blog en français il y a 10 ans environ. quelque temps plus tard, j’en ai créé une version anglaise pour toucher une plus large audience. pendant des années, j’ai publié tous mes articles dans les deux langues. mais l’audience de la version française n’a jamais vraiment décollé, et le fait de devoir traduire tous mes articles nuit à ma motivation pour écrire. j’ai donc décidé d’arrêter pour consacrer mon énergie à la version anglaise, qui est lue par beaucoup plus de monde (environ 20 fois plus). a court ou moyen terme, les articles déjà publiés resteront accessibles, mais je n’en publierai plus de nouveau. a plus long terme, je ne peux pas garantir qu’ils resteront accessibles à cette adresse, mais je tâcherai de les héberger ailleurs. je continuerai cependant à publier sur la version anglaise du blog. et si vraiment vous ne pouvez pas lire en anglais, sachez que je publie certains de mes articles en français sur le blog de mon employeur infinite square . merci à ceux qui m’ont lu fidèlement pendant toutes ces années. j’espère vous retrouver sur mon blog en anglais, ou ailleurs ! bonne continuation à tous ! meta uncategorized comprendre le pipeline de middleware d’asp.net core march 27, 2018 thomas levesque leave a comment middlewhat? l’architecture d’asp.net core est basée sur un système de middlewares , des morceaux de code qui gèrent les requêtes et réponses. les middlewares sont chainés les uns aux autres pour constituer un pipeline . les requêtes entrantes passent dans le pipeline, où chaque middleware a l’occasion de les examiner et/ou de les modifier avant des les passer au middleware suivant. les réponses sortantes passent aussi dans le pipeline, dans l’ordre inverse. si tout cela semble très abstrait, le schéma suivant, tiré de la documentation officielle asp.net core , devrait aider à comprendre : les middlewares peuvent faire toutes sortent de choses, comme gérer l’authentification, les erreurs, les fichiers statiques, etc. la couche mvc d’asp.net core est également implémentée comme un middleware. configurer le pipeline on configure habituellement le pipeline asp.net core dans la méthode configure de la classe startup , en appelant des méthodes use* sur le iapplicationbuilder . voici un exemple tiré de la documentation : public void configure(iapplicationbuilder app) { app.useexceptionhandler("/home/error"); app.usestaticfiles(); app.useauthentication(); app.usemvcwithdefaultroute(); } chaque méthode use* ajoute un middleware au pipeline. l’ordre dans lequel ils sont ajoutés détermine l’ordre dans lequel les requêtes les traverseront. dans cet exemple, une requête entrante va d’abord passer par le middleware de gestion d’exception, puis par le middleware de fichiers statiques, puis par le middleware d’authentification, et sera finalement gérée par le middleware mvc. les méthodes use* dans cet exemple sont en fait juste des raccourcis pour faciliter la construction du pipeline. sous le capot, elles finissent toutes par appeler, directement ou indirectement, les primitives de bas niveau suivantes : use et run . ces deux méthodes ajoutent un middleware au pipeline, la différence est que run ajoute un middleware terminal , c’est à dire qui est le dernier du pipeline. un pipeline basique sans branches regardons d’abord un exemple simple, qui utilise simplement les primitives use et run : public void configure(iapplicationbuilder app) { // middleware a app.use(async (context, next) => { console.writeline("a (before)"); await next(); console.writeline("a (after)"); }); // middleware b app.use(async (context, next) => { console.writeline("b (before)"); await next(); console.writeline("b (after)"); }); // middleware c (terminal) app.run(async context => { console.writeline("c"); await context.response.writeasync("hello world"); }); } ici, les middleware sont définis "inline" avec des méthodes anonymes ; ils pourraient aussi être définis commes des classes complètes, mais pour cet exemple j’ai opté pour la forme la plus concise. les middleware non-terminaux prennent deux arguments : le httpcontext et un delegate qui appelle le middleware suivant. le middleware terminal prend seulement le httpcontext . ici on a deux middlewares non-terminaux a et b qui écrivent simplement dans la console, et un middleware terminal c qui écrit la réponse. voici la sortie console quand on envoie une requête à l’application : a (before) b (before) c b (after) a (after) on voit que chaque middleware est traversé dans l’ordre dans lequel il a été ajouté, puis traversé à nouveau en sens inverse. le pipeline peut être représenté comme suit : court-circuiter le pipeline un middleware n’est pas obligé d’appeler le middleware suivant. par exemple, si le middleware de fichiers statiques peut gérer une requête, il n’a pas besoin de la passer au reste du pipeline, il peut répondre immédiatement. ce comportement s’appelle "court-circuiter le pipeline". dans l’exemple précédent, si on commente l’appel à next() dans le middleware b, on obtient la sortie suivante : a (before) b (before) b (after) a (after) comme vous pouvez le voir, le middleware c n’est jamais appelé. le pipeline ressemble maintenant à ceci : faire des branches dans le pipeline dans les exemples précédents, il y avait une seule "branche" dans le pipeline : le middleware qui suivait a était toujours b, et le middleware qui suivait b était toujours c. mais rien n’impose que ça se passe comme ça ; on peut aussi faire qu’une requête donnée soit traitée par un autre pipeline, en fonction du chemin ou de tout autre critère. il y a deux types de branches : celles qui rejoignent le pipeline principal, et celles qui s’en séparent définitivement. faire une branche entièrement séparée on peut faire cela à l’aide de la méthode map ou mapwhen . map permet de spécifier une branche en fonction du chemin de la requête. mapwhen donne un contrôle plus fin : on peut spécifier un prédicat pour décider de passer ou non sur la branche. prenons un exemple simple avec map : public void configure(iapplicationbuilder app) { app.use(async (context, next) => { console.writeline("a (before)"); await next(); console.writeline("a (after)"); }); app.map( new pathstring("/foo"), a => a.use(async (context, next) => { console.writeline("b (before)"); await next(); console.writeline("b (after)"); })); app.run(async context => { console.writeline("c"); await context.response.writeasync("hello world"); }); } le premier argument de map est un pathstring qui représente le préfixe du chemin de la requête. le second argument est un delegate qui configure le pipeline pour la branche (le paramètre a représente le iapplicationbuilder pour la branche). la branche définie par le delegate traitera la requête si son chemin commence par le préfixe spécifié. pour une requête qui ne commence pas par /foo , ce code produit la sortie suivante : a (before) c a (after) le middleware b n’est pas appelé, puisqu’il est dans la branche, et que la requête ne correspond pas au préfixe pour la branche. mais pour une requête dont le chemin commence par /foo , la sortie est la suivante : a (before) b (before) b (after) a (after) remarquez que cette requête renvoie une erreur 404 (not found) : c’est parce que le middleware b appelle next() , mais il n’y a pas de middleware suivant ; dans ce cas le comportement par défaut est de renvoyer une erreur 404. pour régler ça, on pourrait utiliser run au lieu de use , ou alors ne pas appeler next() . le pipeline défini par ce code peut être représenté comme suit : (pour plus de clarté, j’ai omis les flèches des réponses) comme vous pouvez le voir, la branche où se trouve le middleware b ne rejoint pas le pipeline principal, le middleware c n’est donc pas appelé. faire une branche qui rejoint le pipeline principal on peut
Informations Whois
Whois est un protocole qui permet d'accéder aux informations d'enregistrement.Vous pouvez atteindre quand le site Web a été enregistré, quand il va expirer, quelles sont les coordonnées du site avec les informations suivantes. En un mot, il comprend ces informations;
%%
%% This is the AFNIC Whois server.
%%
%% complete date format : YYYY-MM-DDThh:mm:ssZ
%% short date format : DD/MM
%% version : FRNIC-2.5
%%
%% Rights restricted by copyright.
%% See https://www.afnic.fr/en/products-and-services/services/whois/whois-special-notice/
%%
%% Use '-h' option to obtain more information about this service.
%%
%% [2600:3c03:0000:0000:f03c:91ff:feae:779d REQUEST] >> thomaslevesque.fr
%%
%% RL Net [##########] - RL IP [#########.]
%%
domain: thomaslevesque.fr
status: ACTIVE
hold: NO
holder-c: ANO00-FRNIC
admin-c: ANO00-FRNIC
tech-c: OVH5-FRNIC
zone-c: NFC1-FRNIC
nsl-id: NSL61646-FRNIC
registrar: OVH
Expiry Date: 2020-04-26T08:32:55Z
created: 2012-04-26T08:32:55Z
last-update: 2019-04-26T08:38:37Z
source: FRNIC
ns-list: NSL61646-FRNIC
nserver: dns101.ovh.net
nserver: ns101.ovh.net
source: FRNIC
registrar: OVH
type: Isp Option 1
address: 2 Rue Kellermann
address: 59100 ROUBAIX
country: FR
phone: +33 8 99 70 17 61
fax-no: +33 3 20 20 09 58
e-mail: support@ovh.net
website: http://www.ovh.com
anonymous: NO
registered: 1999-10-21T12:00:00Z
source: FRNIC
nic-hdl: ANO00-FRNIC
type: PERSON
contact: Ano Nymous
remarks: -------------- WARNING --------------
remarks: While the registrar knows him/her,
remarks: this person chose to restrict access
remarks: to his/her personal data. So PLEASE,
remarks: don't send emails to Ano Nymous. This
remarks: address is bogus and there is no hope
remarks: of a reply.
remarks: -------------- WARNING --------------
registrar: OVH
changed: 2019-04-17T17:56:38Z anonymous@anonymous
anonymous: YES
obsoleted: NO
eligstatus: not identified
reachstatus: not identified
source: FRNIC
nic-hdl: ANO00-FRNIC
type: PERSON
contact: Ano Nymous
remarks: -------------- WARNING --------------
remarks: While the registrar knows him/her,
remarks: this person chose to restrict access
remarks: to his/her personal data. So PLEASE,
remarks: don't send emails to Ano Nymous. This
remarks: address is bogus and there is no hope
remarks: of a reply.
remarks: -------------- WARNING --------------
registrar: OVH
changed: 2019-04-17T17:56:39Z anonymous@anonymous
anonymous: YES
obsoleted: NO
eligstatus: not identified
reachstatus: not identified
source: FRNIC
nic-hdl: OVH5-FRNIC
type: ROLE
contact: OVH NET
address: OVH
address: 140, quai du Sartel
address: 59100 Roubaix
country: FR
phone: +33 8 99 70 17 61
e-mail: tech@ovh.net
trouble: Information: http://www.ovh.fr
trouble: Questions: mailto:tech@ovh.net
trouble: Spam: mailto:abuse@ovh.net
admin-c: OK217-FRNIC
tech-c: OK217-FRNIC
notify: tech@ovh.net
registrar: OVH
changed: 2006-10-11T08:41:58Z tech@ovh.net
anonymous: NO
obsoleted: NO
eligstatus: not identified
reachstatus: not identified
source: FRNIC
REFERRER http://www.nic.fr
REGISTRAR AFNIC
SERVERS
SERVER fr.whois-servers.net
ARGS thomaslevesque.fr
PORT 43
TYPE domain
RegrInfo
DISCLAIMER
%
% This is the AFNIC Whois server.
%
% complete date format : YYYY-MM-DDThh:mm:ssZ
% short date format : DD/MM
% version : FRNIC-2.5
%
% Rights restricted by copyright.
% See https://www.afnic.fr/en/products-and-services/services/whois/whois-special-notice/
%
% Use '-h' option to obtain more information about this service.
%
% [2600:3c03:0000:0000:f03c:91ff:feae:779d REQUEST] >> thomaslevesque.fr
%
% RL Net [##########] - RL IP [#########.]
%
REGISTERED yes
ADMIN
HANDLE ANO00-FRNIC
TYPE PERSON
CONTACT Ano Nymous
REMARKS
-------------- WARNING --------------
While the registrar knows him/her,
this person chose to restrict access
to his/her personal data. So PLEASE,
don't send emails to Ano Nymous. This
address is bogus and there is no hope
of a reply.
-------------- WARNING --------------
SPONSOR OVH
CHANGED 2019-04-17
ANONYMOUS YES
OBSOLETED NO
ELIGSTATUS not identified
REACHSTATUS not identified
SOURCE FRNIC
TECH
HANDLE OVH5-FRNIC
TYPE ROLE
CONTACT OVH NET
ADDRESS
OVH
140, quai du Sartel
59100 Roubaix
COUNTRY FR
PHONE +33 8 99 70 17 61
EMAIL tech@ovh.net
TROUBLE
Information: http://www.ovh.fr
Questions: mailto:tech@ovh.net
Spam: mailto:abuse@ovh.net
ADMIN-C OK217-FRNIC
TECH-C OK217-FRNIC
NOTIFY tech@ovh.net
SPONSOR OVH
CHANGED 2006-10-11
ANONYMOUS NO
OBSOLETED NO
ELIGSTATUS not identified
REACHSTATUS not identified
SOURCE FRNIC
OWNER
HANDLE ANO00-FRNIC
TYPE PERSON
CONTACT Ano Nymous
REMARKS
-------------- WARNING --------------
While the registrar knows him/her,
this person chose to restrict access
to his/her personal data. So PLEASE,
don't send emails to Ano Nymous. This
address is bogus and there is no hope
of a reply.
-------------- WARNING --------------
SPONSOR OVH
CHANGED 2019-04-17
ANONYMOUS YES
OBSOLETED NO
ELIGSTATUS not identified
REACHSTATUS not identified
SOURCE FRNIC
DOMAIN
STATUS ACTIVE
HOLD NO
SPONSOR OVH
EXPIRY DATE 2020-04-26T08:32:55Z
CREATED 2012-04-26
CHANGED 2019-04-26
SOURCE FRNIC
HANDLE NSL61646-FRNIC
NSERVER
DNS101.OVH.NET 213.251.188.145
NS101.OVH.NET 213.251.128.145
NAME thomaslevesque.fr
Go to top