Cette question existe parce qu'elle a une signification historique, mais elle n'est pas considérée comme une bonne question sur le sujet pour ce site, veuillez donc ne pas l'utiliser comme preuve que vous pouvez poser des questions similaires ici.
Il existe toujours des fonctionnalités qui seraient utiles dans les scénarios marginaux, mais pour cette raison même, la plupart des gens ne les connaissent pas. Je demande des fonctionnalités qui ne sont généralement pas enseignées par les manuels.
Bonne question, je souhaite pouvoir voter plusieurs fois!
Gavin Miller
1
D'accord. J'aime des discussions comme celle-ci. Il y a tellement de profondeur dans le framework, que vous êtes parfois étonné de choses que vous ne saviez pas.
Deane
J'apprends tellement de nouveaux trucs sympas à partir des réponses dans ce fil - merci! :)
Maxim Zaslavsky
16
Plutôt que "Fonctionnalités cachées de ..", ces choses ne devraient pas être appelées "Fonctionnalités peu connues de .." car la plupart des réponses sont bien documentées dans MSDN ou ailleurs, tout simplement peu connues ou utilisées.
Vraiment? J'étais sur le point d'installer un faux serveur SMTP, comme Dumbster. J'ai caché un joyau.
Eduardo Molteni
2
Est-ce que quelqu'un sait si vous pouvez spécifier un partage UNC pour l'emplacement du répertoire?
Mark Sherretta,
32
Mieux encore, mettez cela sur votre boîte de développement machine.config, afin que vous n'ayez pas à changer le web.config sur chaque application que vous créez.
Max Toro
Pouvez-vous le configurer pour qu'il ne le fasse que sur l'hôte local? De cette façon, vous n'avez pas à le changer à chaque fois?
chobo2
Il n'y a pas de réglage pour ça. Vous devrez gérer les différences de configuration à l'aide d'autres méthodes (projets de déploiement Web, tâches de génération, etc.)
John Sheehan
210
Si vous placez un fichier nommé app_offline.htm
à la racine d'un répertoire d'application Web, ASP.NET 2.0+ arrêtera l'application et arrêtera le traitement normal de toute nouvelle demande entrante pour cette application, affichant uniquement le contenu de app_offline.htm fichier pour toutes les nouvelles demandes .
Il s'agit du moyen le plus rapide et le plus simple d'afficher votre avis "Site temporairement indisponible" lors du redéploiement (ou de la restauration) des modifications sur un serveur de production.
De plus, comme l'a souligné marxidad , assurez-vous d'avoir au moins 512 octets de contenu dans le fichier pour qu'IE6 le rende correctement.
Aie! Soyez prudent lorsque vous l'utilisez avec MOSS 2007. Cela ne fonctionnera que pour les pages qui ont été consultées depuis le dernier redémarrage d'IIS. Donc, si vous ajoutez cette page à votre racine virtuelle wss, puis essayez d'ouvrir une page qui n'avait pas été consultée précédemment, vous obtiendrez un 404.
Marc
1
@Marc - J'ai reçu cette astuce de Scott Guthrie, si vous vous sentez généreux, vous aideriez beaucoup de développeurs SharePoint à éviter ce scénario si vous commentiez
Troy DeMonbreun
De plus, cela déclenchera également un recyclage du domaine d'application et fermera toutes les connexions de base de données ouvertes, une fois toutes les demandes terminées.
Bart Verkoeijen
Il y a une mise en garde à celui-ci: IIS renvoie le contenu app_offline.htm avec un code d'état HTTP de 404. Si un moteur de recherche se promenait et tentait d'indexer votre site pendant que vous êtes dans ce mode hors ligne, vous pourriez ne pas apprécier les résultats. Mais cela fonctionne très bien pour mon application Web d'entreprise privée!
Larry Silverman
119
thrownewHttpException(404,"Article not found");
Cela sera rattrapé par ASP.NET qui renverra la page customErrors. En savoir plus sur celui-ci dans un récent article .NET Astuce du jour
Certains développeurs pourraient faire valoir qu'il est préférable de conclure les choses manuellement dans HttpContext.Response plutôt que de lever une exception qui est une opération assez coûteuse dans les livres .NET.
lubos hasko
N'est-ce pas une mauvaise forme? Vous affichez l'erreur 404, tandis que vous souhaitez afficher une erreur / exception.
Donnie Thomas
1
Un cas auquel je peux penser est que si quelqu'un joue malicieusement avec les paramètres et met quelque chose de invalide, vous voulez probablement un 404 générique pas une erreur spécifique.
John Sheehan
3
A voté uniquement parce que je connais maintenant le site Astuce du jour .NET.
Kon
cela ne fonctionne que lorsque vous le lancez dans httpModule ou httpHandler
Khaled Musaied
75
Voici le meilleur. Ajoutez ceci à votre web.config pour une compilation BEAUCOUP plus rapide. Il s'agit de la version 3.5SP1 via ce QFE .
<compilationoptimizeCompilations="true">
Résumé rapide: nous introduisons un nouveau commutateur OptimizeCompilations dans ASP.NET qui peut considérablement améliorer la vitesse de compilation dans certains scénarios. Il y a des captures, alors lisez la suite pour plus de détails. Ce commutateur est actuellement disponible en tant que QFE pour 3.5SP1 et fera partie de VS 2010.
Le système de compilation ASP.NET adopte une approche très conservatrice qui lui fait effacer tout travail précédent qu'il a effectué chaque fois qu'un fichier de «niveau supérieur» change. Les fichiers de «haut niveau» incluent tout dans bin et App_Code, ainsi que global.asax. Bien que cela fonctionne bien pour les petites applications, il devient presque inutilisable pour les très grandes applications. Par exemple, un client se heurtait à un cas où il fallait 10 minutes pour actualiser une page après avoir apporté une modification à un assemblage «bin».
Pour soulager la douleur, nous avons ajouté un mode de compilation «optimisé» qui adopte une approche beaucoup moins conservatrice de la recompilation.
Est-ce "activé par défaut" avec VS 2010 ou dois-je quand même l'essayer?
M4N
73
HttpContext.Current vous donnera toujours accès à la requête / réponse / etc. Du contexte actuel, même lorsque vous n'avez pas accès aux propriétés de la page (par exemple, à partir d'une classe d'assistance à couplage lâche).
Vous pouvez continuer à exécuter du code sur la même page après avoir redirigé l'utilisateur vers une autre en appelant Response.Redirect ( url , false )
Vous n'avez pas besoin de fichiers .ASPX si tout ce que vous voulez est une page compilée (ou tout IHttpHandler ). Définissez simplement le chemin et les méthodes HTTP pour pointer vers la classe dans l' <httpHandlers>élément du fichier web.config.
Un objet Page peut être récupéré à partir d'un fichier .ASPX par programmation en appelant PageParser.GetCompiledPageInstance (virtualPath, aspxFileName, Context)
À propos de Response.Redirect (url, false) - C'est tellement ce que j'espérais depuis longtemps .. Je ne sais pas comment j'ai raté ça mais thanxxx
Subliminal Hash
1
Quelqu'un peut-il expliquer ce que vous en feriez? Je sais que cela a une certaine valeur, mais je ne comprends pas pourquoi ...
Deane
5
Si vous souhaitez rediriger l'utilisateur vers une autre adresse mais que vous avez encore du traitement en arrière-plan à faire (par exemple, une demande de génération de rapport qui redirige vers la page d'état de génération du rapport pendant qu'elle continue de générer le rapport en arrière-plan)
Mark Cidade
Quelqu'un peut-il expliquer une situation utile pour PageParser.GetCompiledPageInstance (..)? Les documents disent que c'est pour l'utilisation de l'infrastructure - il retourne un type IHttpHandler donc je ne vois pas comment il peut être utilisé pratiquement.
John K
@jdk: Je l'ai utilisé dans le passé lors de la substitution du gestionnaire par défaut pour les requêtes * .aspx afin que je puisse utiliser des objets IHttpHandler dynamiques en mémoire mais aussi utiliser GetCompiledPageInstance () pour les fichiers physiques * .aspx.
Substitue les paramètres web.config pour appliquer le débogage à false, active les erreurs personnalisées et désactive le suivi. N'oubliez plus de modifier les attributs avant la publication. Laissez-les tous configurés pour les environnements de développement ou de test et mettez à jour les paramètres de vente au détail.
J'oublie parfois de changer le débogage de la compilation en faux avant la publication, ce qui affecte négativement les performances. Plus de problème!
Roy Tinker
59
Activer Intellisense pour MasterPages dans les pages de contenu
Je suis sûr que c'est un hack très peu connu
La plupart du temps, vous devez utiliser la méthode findcontrol et convertir les contrôles en page maître à partir des pages de contenu lorsque vous souhaitez les utiliser, le MasterType directive intellisense dans Visual Studio une fois que vous y serez
Personnellement, je pense que la fonctionnalité devrait être ignorée par les gens, elle couple la page à la page principale. Si vous finissez par utiliser les propriétés / méthodes de la page maître, puis changez la page maître, vous vous retrouvez avec un cauchemar de maintenance.
Phill
@Phil: Parfois, cela est nécessaire et avoir un accès typé à une page maître est bien meilleur que l'approche FindControl. Au moins, vous obtenez le message du compilateur et pouvez le corriger rapidement.
Durden81
58
HttpContext.Items en tant qu'outil de mise en cache au niveau de la demande
Cela allait être mon point également, je l'utilise dans les contrôles imbriqués pour transmettre / recevoir des informations sur le niveau de la demande. Je l'utilise également dans MVC pour stocker une liste de fichiers js à ajouter, basés sur des vues partielles.
Tracker1
1
Je l'utilise lorsque j'utilise le routage asp.net pour transmettre les paramètres récupérés des URL à mes pages. (pas avec MVC) idéal pour la réécriture d'URL et est assez flexible.
Alexandre Brisebois
Hmmmm, j'ai juste pensé à un endroit où j'aurais pu utiliser ça au lieu de Session - ta!
Mike Kingscott,
52
Deux choses ressortent dans ma tête:
1) Vous pouvez activer et désactiver Trace à partir du code:
Vous pouvez avoir des contrôles dans l'ASPX qui n'apparaissent pas dans Class1, et vice-versa, mais vous devez vous rappeler de vérifier vos contrôles pour des valeurs nulles.
J'aurais voté cela, mais je n'ai plus de votes. Je vais essayer de me souvenir de revenir voter pour cela. Je ne savais pas que nous pourrions avoir le même fichier Code Behind pour plusieurs pages. Je ne sais pas comment cela fonctionnerait.
Vaibhav
5
Est-ce que quelqu'un d'autre pense que c'est un risque pour la sécurité de vous permettre d'activer une trace à partir d'une URL? (# 1) Je ne vais pas dévaloriser cette question, mais il est important de comprendre le risque là-bas.
Kevin Goff
5
Absolument, vous devriez vraiment mettre ce code dans un bloc #ifdef DEBUG #endif
Radu094
Grands commentaires, soulignant l'aspect sécurité.
Vaibhav
2
Pourquoi est-ce un risque pour la sécurité d'activer une trace à partir de l'URL? Comment peut-il être utilisé pour me nuire?
Kamarey
48
Vous pouvez utiliser:
Request.Params[Control.UniqueId]
Pour obtenir la valeur d'un contrôle AVANT que viewstate ne soit initialisé (Control.Text, etc. sera vide à ce stade).
L'initialisation de Viewstate ne traite pas avec Request.Params. Utilisez-le AVANT d'augmenter la méthode LoadPostData du contrôle implémenté IPostBackDataHandler.
chapluck
46
WebMethods.
Vous pouvez utiliser les rappels ASP.NET AJAX aux méthodes Web placées dans les pages ASPX. Vous pouvez décorer une méthode statique avec les attributs [WebMethod ()] et [ScriptMethod ()]. Par exemple:
Le mappage de balises vous permet d'échanger des contrôles compatibles au moment de la compilation sur chaque page de votre application Web. Un exemple utile est si vous avez un contrôle ASP.NET stock, tel qu'un DropDownList, et que vous souhaitez le remplacer par un contrôle personnalisé dérivé de DropDownList. Il peut s'agir d'un contrôle personnalisé pour fournir une mise en cache plus optimisée des données de recherche. Au lieu de modifier chaque formulaire Web et de remplacer les DropDownLists intégrés par votre version personnalisée, vous pouvez avoir ASP.NET en effet le faire pour vous en modifiant web.config:
Ce serait très déroutant pour les autres développeurs de votre équipe
Aykut Akıncı
1
@Aykut - En effet, cela pourrait l'être, c'est pourquoi je déclare que son utilité est plutôt étroite, cependant, lorsque cela est nécessaire, c'est très pratique. De plus, je m'assurerais que toute utilisation de Tag Mapping était très clairement documentée pour éviter toute confusion et ambiguïté.
CraigTP
43
HttpModules . L'architecture est folle et élégante. Peut-être pas une fonctionnalité cachée, mais cool quand même.
HttpModules est quelque chose de avancé, mais je ne dirais pas qu'il est rare ou moins utilisé (ou me dit naïf). Mais oui, j'aime l'architecture.
Vaibhav
+1, car de nombreux développeurs chevronnés connaissent peut-être HttpModules mais ne comprennent pas pleinement leur relation avec les demandes. (Même chose avec HttpHandlers)
John Bubriski
34
Vous pouvez utiliser les commentaires ASP.NET dans une page .aspx pour mettre en commentaire des parties complètes d'une page, y compris les contrôles serveur. Et le contenu commenté ne sera jamais envoyé au client.
La vraie beauté du générateur d'expressions de code est que vous pouvez utiliser des expressions de liaison de données comme dans des situations sans liaison de données. Vous pouvez également créer d'autres générateurs d'expressions qui exécutent d'autres fonctions.
que voulez-vous dire par «et autres» dans le titre?
Khaled Musaied
Eh bien, je suppose que je ne suis jamais arrivé aux autres.
andleer
2
+1, fonctionnalité vraiment cool ... C'est en fait assez similaire aux extensions de balisage de WPF
Thomas Levesque
n'est-ce pas la même chose que d'utiliser <%= /*code*/ %>?
bevacqua
33
Utilisation du type de fichier ASHX:
Si vous souhaitez simplement sortir du HTML ou du XML de base sans passer par les gestionnaires d'événements de page, vous pouvez implémenter le HttpModule de manière simple
Nommez la page en tant que SomeHandlerPage.ashx et insérez simplement le code ci-dessous (une seule ligne)
Il convient de noter que vous devez ajouter IRequiresSessionState ou IReadOnlySessionState si vous en avez besoin, sinon il ne sera pas là.
Tracker1
3
Il convient également de noter que vous pouvez spécifier la configuration du gestionnaire dans le web.config afin que vous n'ayez pas besoin d'avoir un fichier ashx physique autour. Ou vous pouvez enregistrer le gestionnaire par programme dans le démarrage de votre application dans l'asax global.
+1. Pouvez-vous publier un court exemple de code en ligne. Je pense que cela générera plus d'attention et de votes positifs. Je veux que celui-ci monte.
J'ai travaillé sur une application asp.net qui a subi un audit de sécurité par une société de sécurité de premier plan et j'ai appris cette astuce simple pour éviter une vulnérabilité de sécurité moins connue mais importante.
Pensez à utiliser Page.ViewStateUserKey pour contrer les attaques en un clic. Si vous authentifiez vos appelants et utilisez ViewState, définissez la propriété Page.ViewStateUserKey dans le gestionnaire d'événements▶Init pour empêcher les attaques en un clic.
Définissez la propriété sur une valeur que vous savez unique à chaque utilisateur, telle qu'un ID de session, un nom d'utilisateur ou un identifiant d'utilisateur.
Une attaque en un clic se produit lorsqu'un attaquant crée une page Web (.htm ou .aspx) qui contient un champ de formulaire masqué nommé __VIEWSTATE qui est déjà rempli de données ViewState. Le ViewState peut être généré à partir d'une page que l'attaquant avait précédemment créée, comme une page de panier contenant 100 articles. L'attaquant attire un utilisateur sans méfiance dans la navigation vers la page, puis l'attaquant provoque l'envoi de la page au serveur sur lequel ViewState est valide. Le serveur n'a aucun moyen de savoir que le ViewState provient de l'attaquant. La validation ViewState et les HMAC ne contrent pas cette attaque car le ViewState est valide et la page est exécutée dans le contexte de sécurité de l'utilisateur.
En définissant la propriété ViewStateUserKey, lorsque l'attaquant accède à une page pour créer ViewState, la propriété est initialisée à son nom. Lorsque l'utilisateur légitime soumet la page au serveur, elle est initialisée avec le nom de l'attaquant. Par conséquent, la vérification ViewState HMAC échoue et une exception est générée.
N'oubliez pas de quitter la base.OnInit (e); pour que la fonction▶Init () fasse son travail.
Druide
Je pense que cette astuce peut échouer si un utilisateur réel n'a pas accepté les cookies, ou si sessionid a un délai d'expiration.
Aristos
1
Vous n'avez pas besoin base.OnInit(e);si vous utilisez AutoEventWireup="true"la page.
Adam Nofsinger
1
Druide: Il ne remplace pas OnInit (dans ce cas, base.OnInit (e) serait nécessaire).
crdx
L'utilisation de l'ID de session pour ViewStateUserKey ne fonctionne qu'après le démarrage d'une session. Cela signifie également que ces pages peuvent expirer après l'expiration de la session. Dans les cas où ces problèmes sont une préoccupation, vous pourriez envisager d'utiliser quelque chose de plus durable, comme l'adresse IP de l'utilisateur.
C'est idéal pour déterminer quels scripts afficher (versions min ou complètes) ou tout autre élément que vous pourriez souhaiter en dev, mais pas en direct.
Utilisation de configSource pour diviser les fichiers de configuration.
Vous pouvez utiliser l'attribut configSource dans un fichier web.config pour pousser des éléments de configuration vers d'autres fichiers .config, par exemple, au lieu de:
<appSettings><addkey="webServiceURL"value="https://some/ws.url"/><!-- some more keys --></appSettings>
... vous pouvez avoir la totalité de la section appSettings stockée dans un autre fichier de configuration. Voici la nouveauté web.config:
<appSettingsconfigSource="myAppSettings.config"/>
Le myAppSettings.configdossier:
<appSettings><addkey="webServiceURL"value="https://some/ws.url"/><!-- some more keys --></appSettings>
Ceci est très utile pour les scénarios où vous déployez une application sur un client et que vous ne voulez pas qu'ils interfèrent avec le fichier web.config lui-même et que vous souhaitez simplement qu'ils puissent modifier quelques paramètres.
Cela fonctionne également sur tout type de projet .net, ex app Desktop. configs
Zoltan Veres
17
Attribut MaintainScrollPositionOnPostback dans la directive Page. Il est utilisé pour maintenir la position de défilement de la page aspx sur les publications.
Par défaut, tout contenu entre les balises d'un contrôle personnalisé est ajouté en tant que contrôle enfant. Cela peut être intercepté dans un remplacement AddParsedSubObject () pour le filtrage ou l'analyse supplémentaire (par exemple, du contenu de texte dans LiteralControls):
Si ASP.NET génère un flux RSS, il mettra parfois une ligne supplémentaire en haut de la page. Cela ne sera pas validé avec les validateurs RSS courants. Vous pouvez contourner ce problème en plaçant la directive page <@Page>au bas de la page.
Ne feriez-vous pas mieux d'utiliser un gestionnaire .ASHX pour générer des flux RSS?
Dan Diplo
Je suppose que cela dépend de la complexité du projet. Tout le monde n'a pas la capacité ou les compétences pour créer et compiler des gestionnaires. Dans la page asp.net fonctionne assez bien pour cela
Kevin Goff
1
Et vous pouvez utiliser quelque chose comme <asp: Repeater> pour générer des éléments RSS et faire d'autres astuces (comme utiliser LogInView pour supprimer certains éléments), ce qui est bien mieux que d'écrire des chaînes depuis ASHX IMO
chakrit
LinqToXml + ASHX est la voie à suivre!
Carlos Muñoz
Ceci est utile pour bien plus que la génération de flux RSS. IIRC, HTML5 doit avoir la balise <! Doctype html> sur la première ligne en haut pour valider correctement.
Roy Tinker
12
Avant qu'ASP.NET v3.5 ajoute des itinéraires, vous pouviez créer vos propres URL conviviales simplement en écrivant un HTTPModule et en réécrivant la demande au début du pipeline de pages (comme l'événement BeginRequest).
DotNetNuke a un très bon HttpModule qui fait cela pour leurs URL amicales. Est toujours utile pour les machines sur lesquelles vous ne pouvez pas déployer .NET v3.5.
Réponses:
Pendant les tests, vous pouvez envoyer des e-mails dans un dossier de votre ordinateur au lieu d'un serveur SMTP. Mettez ceci dans votre web.config:
la source
Si vous placez un fichier nommé app_offline.htm à la racine d'un répertoire d'application Web, ASP.NET 2.0+ arrêtera l'application et arrêtera le traitement normal de toute nouvelle demande entrante pour cette application, affichant uniquement le contenu de app_offline.htm fichier pour toutes les nouvelles demandes .
Il s'agit du moyen le plus rapide et le plus simple d'afficher votre avis "Site temporairement indisponible" lors du redéploiement (ou de la restauration) des modifications sur un serveur de production.
De plus, comme l'a souligné marxidad , assurez-vous d'avoir au moins 512 octets de contenu dans le fichier pour qu'IE6 le rende correctement.
la source
Cela sera rattrapé par ASP.NET qui renverra la page customErrors. En savoir plus sur celui-ci dans un récent article .NET Astuce du jour
la source
Voici le meilleur. Ajoutez ceci à votre web.config pour une compilation BEAUCOUP plus rapide. Il s'agit de la version 3.5SP1 via ce QFE .
Via ici :
la source
HttpContext.Current vous donnera toujours accès à la requête / réponse / etc. Du contexte actuel, même lorsque vous n'avez pas accès aux propriétés de la page (par exemple, à partir d'une classe d'assistance à couplage lâche).
Vous pouvez continuer à exécuter du code sur la même page après avoir redirigé l'utilisateur vers une autre en appelant Response.Redirect ( url , false )
Vous n'avez pas besoin de fichiers .ASPX si tout ce que vous voulez est une page compilée (ou tout IHttpHandler ). Définissez simplement le chemin et les méthodes HTTP pour pointer vers la classe dans l'
<httpHandlers>
élément du fichier web.config.Un objet Page peut être récupéré à partir d'un fichier .ASPX par programmation en appelant PageParser.GetCompiledPageInstance (virtualPath, aspxFileName, Context)
la source
Mode Retail au niveau machine.config:
Substitue les paramètres web.config pour appliquer le débogage à false, active les erreurs personnalisées et désactive le suivi. N'oubliez plus de modifier les attributs avant la publication. Laissez-les tous configurés pour les environnements de développement ou de test et mettez à jour les paramètres de vente au détail.
la source
Activer Intellisense pour MasterPages dans les pages de contenu
Je suis sûr que c'est un hack très peu connu
La plupart du temps, vous devez utiliser la méthode findcontrol et convertir les contrôles en page maître à partir des pages de contenu lorsque vous souhaitez les utiliser, le MasterType directive intellisense dans Visual Studio une fois que vous y serez
il suffit d'ajouter une autre directive à la page
Si vous ne souhaitez pas utiliser le chemin virtuel et utiliser le nom de classe à la place,
Obtenez l'article complet ici
la source
HttpContext.Items en tant qu'outil de mise en cache au niveau de la demande
la source
Deux choses ressortent dans ma tête:
1) Vous pouvez activer et désactiver Trace à partir du code:
2) Vous pouvez créer plusieurs pages .aspx en utilisant un seul fichier partagé "code-behind".
Créez un fichier .cs d'une classe:
et puis vous pouvez avoir un nombre illimité de pages .aspx (après avoir supprimé le code -designer .designer.cs et .cs que VS a généré):
Vous pouvez avoir des contrôles dans l'ASPX qui n'apparaissent pas dans Class1, et vice-versa, mais vous devez vous rappeler de vérifier vos contrôles pour des valeurs nulles.
la source
Vous pouvez utiliser:
Pour obtenir la valeur d'un contrôle AVANT que viewstate ne soit initialisé (Control.Text, etc. sera vide à ce stade).
Ceci est utile pour le code dans Init.
la source
WebMethods.
Vous pouvez utiliser les rappels ASP.NET AJAX aux méthodes Web placées dans les pages ASPX. Vous pouvez décorer une méthode statique avec les attributs [WebMethod ()] et [ScriptMethod ()]. Par exemple:
Maintenant, dans votre page ASPX, vous pouvez le faire:
Et appelez votre méthode côté serveur via JavaScript en utilisant:
la source
Vérifiez si le client est toujours connecté avant de démarrer une tâche de longue durée:
la source
Une fonctionnalité peu connue et rarement utilisée d'ASP.NET est:
Cartographie des balises
Il est rarement utilisé car il n'y a qu'une situation spécifique où vous en auriez besoin, mais quand vous en avez besoin, c'est tellement pratique.
Quelques articles sur cette fonctionnalité peu connue:
Mappage de balises dans ASP.NET
Utilisation du mappage de balises dans ASP.NET 2.0
et de ce dernier article:
la source
HttpModules . L'architecture est folle et élégante. Peut-être pas une fonctionnalité cachée, mais cool quand même.
la source
Vous pouvez utiliser les commentaires ASP.NET dans une page .aspx pour mettre en commentaire des parties complètes d'une page, y compris les contrôles serveur. Et le contenu commenté ne sera jamais envoyé au client.
la source
Le générateur d'expression de code
Exemple de balisage:
La vraie beauté du générateur d'expressions de code est que vous pouvez utiliser des expressions de liaison de données comme dans des situations sans liaison de données. Vous pouvez également créer d'autres générateurs d'expressions qui exécutent d'autres fonctions.
web.config:
La classe cs qui fait que tout se passe:
la source
<%= /*code*/ %>
?Utilisation du type de fichier ASHX:
Si vous souhaitez simplement sortir du HTML ou du XML de base sans passer par les gestionnaires d'événements de page, vous pouvez implémenter le HttpModule de manière simple
Nommez la page en tant que SomeHandlerPage.ashx et insérez simplement le code ci-dessous (une seule ligne)
Ensuite, le fichier de code
la source
Définition des propriétés de contrôle du serveur en fonction du navigateur cible et plus encore .
Celui-là m'a un peu pris par surprise.
la source
System.Web.VirtualPathUtility
la source
J'ai travaillé sur une application asp.net qui a subi un audit de sécurité par une société de sécurité de premier plan et j'ai appris cette astuce simple pour éviter une vulnérabilité de sécurité moins connue mais importante.
L'explication ci-dessous provient de: http://www.guidanceshare.com/wiki/ASP.NET_2.0_Security_Guidelines_-_Parameter_Manipulation#Consider_Using_Page.ViewStateUserKey_to_Counter_One-Click_Attacks
Pensez à utiliser Page.ViewStateUserKey pour contrer les attaques en un clic. Si vous authentifiez vos appelants et utilisez ViewState, définissez la propriété Page.ViewStateUserKey dans le gestionnaire d'événements▶Init pour empêcher les attaques en un clic.
Définissez la propriété sur une valeur que vous savez unique à chaque utilisateur, telle qu'un ID de session, un nom d'utilisateur ou un identifiant d'utilisateur.
Une attaque en un clic se produit lorsqu'un attaquant crée une page Web (.htm ou .aspx) qui contient un champ de formulaire masqué nommé __VIEWSTATE qui est déjà rempli de données ViewState. Le ViewState peut être généré à partir d'une page que l'attaquant avait précédemment créée, comme une page de panier contenant 100 articles. L'attaquant attire un utilisateur sans méfiance dans la navigation vers la page, puis l'attaquant provoque l'envoi de la page au serveur sur lequel ViewState est valide. Le serveur n'a aucun moyen de savoir que le ViewState provient de l'attaquant. La validation ViewState et les HMAC ne contrent pas cette attaque car le ViewState est valide et la page est exécutée dans le contexte de sécurité de l'utilisateur.
En définissant la propriété ViewStateUserKey, lorsque l'attaquant accède à une page pour créer ViewState, la propriété est initialisée à son nom. Lorsque l'utilisateur légitime soumet la page au serveur, elle est initialisée avec le nom de l'attaquant. Par conséquent, la vérification ViewState HMAC échoue et une exception est générée.
la source
base.OnInit(e);
si vous utilisezAutoEventWireup="true"
la page.HttpContext.Current.IsDebuggingEnabled
C'est idéal pour déterminer quels scripts afficher (versions min ou complètes) ou tout autre élément que vous pourriez souhaiter en dev, mais pas en direct.
la source
Inclus dans ASP.NET 3.5 SP1:
la source
Propriété DefaultButton dans les panneaux.
Il définit le bouton par défaut pour un panneau particulier.
la source
ScottGu a un tas d'astuces à http://weblogs.asp.net/scottgu/archive/2006/04/03/441787.aspx
la source
Utilisation de configSource pour diviser les fichiers de configuration.
Vous pouvez utiliser l'attribut configSource dans un fichier web.config pour pousser des éléments de configuration vers d'autres fichiers .config, par exemple, au lieu de:
... vous pouvez avoir la totalité de la section appSettings stockée dans un autre fichier de configuration. Voici la nouveauté
web.config
:Le
myAppSettings.config
dossier:Ceci est très utile pour les scénarios où vous déployez une application sur un client et que vous ne voulez pas qu'ils interfèrent avec le fichier web.config lui-même et que vous souhaitez simplement qu'ils puissent modifier quelques paramètres.
réf: http://weblogs.asp.net/fmarguerie/archive/2007/04/26/using-configsource-to-split-configuration-files.aspx
la source
Attribut MaintainScrollPositionOnPostback dans la directive Page. Il est utilisé pour maintenir la position de défilement de la page aspx sur les publications.
la source
HttpContext.IsCustomErrorEnabled est une fonctionnalité intéressante que j'ai trouvée utile plusieurs fois. Voici un court article à ce sujet.
la source
Par défaut, tout contenu entre les balises d'un contrôle personnalisé est ajouté en tant que contrôle enfant. Cela peut être intercepté dans un remplacement AddParsedSubObject () pour le filtrage ou l'analyse supplémentaire (par exemple, du contenu de texte dans LiteralControls):
...
la source
Si ASP.NET génère un flux RSS, il mettra parfois une ligne supplémentaire en haut de la page. Cela ne sera pas validé avec les validateurs RSS courants. Vous pouvez contourner ce problème en plaçant la directive page
<@Page>
au bas de la page.la source
Avant qu'ASP.NET v3.5 ajoute des itinéraires, vous pouviez créer vos propres URL conviviales simplement en écrivant un HTTPModule et en réécrivant la demande au début du pipeline de pages (comme l'événement BeginRequest).
Des URL comme http: // nom_serveur / page / Param1 / SomeParams1 / Param2 / SomeParams2 seraient mappées vers une autre page comme ci-dessous (en utilisant souvent des expressions régulières).
DotNetNuke a un très bon HttpModule qui fait cela pour leurs URL amicales. Est toujours utile pour les machines sur lesquelles vous ne pouvez pas déployer .NET v3.5.
la source