国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Maison développement back-end Tutoriel C#.Net Page d'erreur personnalisée ASP.NET MVC

Page d'erreur personnalisée ASP.NET MVC

Dec 24, 2016 pm 01:48 PM

Si vous rencontrez des difficultés pour configurer les pages d'erreur personnalisées asp.net mvc, vous n'êtes pas seul. Je suis surpris que votre approche soit correcte. La raison pour laquelle cela ne fonctionne pas est qu'une partie des erreurs est gérée par le pipeline asp.net et l'autre partie est gérée directement par iis.

En général (je m'attends à ce que ce soit le cas, sur certains autres frameworks/serveurs), nous avons simplement besoin de configurer la page d'erreur personnalisée en un seul endroit, peu importe où l'erreur est générée. Comme ceci?:

<customErrors mode="On">
  <error code="404" path="404.html" />
  <error code="500" path="500.html" />
</customErrors>

Page d'erreur 404 personnalisée

Lorsqu'une ressource n'existe pas (y compris statique et dynamique), nous devons renvoie une page d'état 404, nous devons généralement fournir des informations légèrement conviviales pour remplacer la page d'erreur par défaut générée par asp.net/iis à présenter aux visiteurs de notre site Web, en donnant peut-être des conseils sur les raisons pour lesquelles la ressource peut ne pas exister ou en fournissant des options. site Web à rechercher.

Les paramètres simples ici juste à titre de démonstration sont les suivants?:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8"/>
  <title>404 Page Not Found</title>
</head>
<body>
  <h1>404 Page Not Found</h1>
</body>
</html>

J'ai créé une nouvelle application ASP.NET MVC 5, comprenant Le modèle standard fourni avec vs. Si je l'exécute et essaie de naviguer vers un chemin inexistant, par exemple /foo/bar, j'obtiens une page ASP.NET 404 standard avec les informations suivantes?:

ASP.NET MVC自定義錯(cuò)誤頁(yè)面

Non Trop sympathique, n'est-ce pas ?

L'erreur dans ce cas est générée par ASP.NET MVC car il ne trouve pas de contr?leur ou d'action correspondant à l'URL.

Afin de personnaliser la page d'erreur 404, dans la section de configuration de web.config?:

<customErrors mode="On">
 <error statusCode="404" redirect="~/404.html"/>
</customErrors>

mode="On" afin que nous puissions voir la page d'erreur localement. En règle générale, vous souhaiterez peut-être définir mode="RemoteOnly" uniquement pour le rendu lors de sa mise en service.

Maintenant, si je navigue à nouveau vers /foo/bar, je peux voir la page d'erreur que je viens de définir

Cependant, comme je m'y attendais, le chemin de l'URL à ce moment n'est pas /foo/bar. ASP.NET le redirige vers /404.html?aspxerrorpath=/foo/bar, et j'ai vérifié que le code d'état HTTP de la réponse est également un 200 normal.

C'est très mauvais, renvoyer le code http 200 est non seulement trompeur mais aussi mauvais pour le référencement. En termes simples, si la ressource sur le chemin spécifié n'existe pas, 404 doit être renvoyée. Si la ressource a été déplacée, elle doit être redirigée vers le nouveau chemin.

Pour résoudre ce problème, nous pouvons modifier le comportement par défaut d'ASP.NET consistant à rediriger la page d'erreur pour réécrire la réponse.

<customErrors mode="On" redirectMode="ResponseRewrite">
 <error statusCode="404" redirect="~/404.html"/>
</customErrors>

Cependant, cela n'a pas beaucoup d'effet (cet étranger est vraiment verbeux bien que l'adresse URL d'origine n'ait pas été redirigée, ASP.NET). renvoie toujours 200, en plus d'afficher notre page d'erreur personnalisée sous forme de texte brut.

Il semble que nous devions revenir à une page ASP.NET. Si vous pensiez que vous n'aviez pas besoin d'aller sur la page *.aspx auparavant, alors j'ai bien peur de vous avoir dé?u.

Ainsi, après avoir modifié la page d'erreur et le web.config correspondant en 404.aspx, l'URL et le type de contenu (texte/html) sont normaux.

Mais le problème du 200 existe toujours. Microsoft a officiellement fourni une solution correspondante à ce problème?: définir le code d'état de la page. Nous ajoutons la partie suivante au 404.aspx?:

<. ;% Response.StatusCode = 404 %>

Nous avons maintenant le code d'état, l'URL et la page d'erreur personnalisés corrects. Avons-nous terminé??

Faux.

Si nous établissons un lien vers un chemin de page statique (par exemple foo.html) ou une URL qui ne correspond pas à notre configuration de routage (par exemple /foo/bar/foo/bar), nous Vous verrez une page d'erreur IIS 404 standard

La situation ci-dessus contourne ASP.NET et IIS gère la requête. Bien s?r, si vous renvoyez un HttpNotFound() dans le contr?leur, vous obtiendrez la même chose. résultat. ——C'est parce que MVC définit simplement le code d'état et ne génère pas d'erreur, mais le transmet à IIS

Dans ce cas, nous devons définir la page d'erreur d'iis (valable uniquement pour IIS. 7). Dans la section de configuration web.config ?:

<httpErrors errorMode="Custom">
 <remove statusCode="404"/>
 <error statusCode="404" path="/404.html" responseMode="ExecuteURL"/>
</httpErrors>

Définissez également errorMode=" Custom" pour que les tests locaux. Normalement, il sera défini sur errorMode="DetailedLocalOnly".

Notez que j'ai utilisé une page html au lieu d'aspx. Habituellement, vous devez utiliser de simples fichiers statiques comme pages d'erreur afin que la page d'erreur puisse toujours être affichée même si une erreur ASP.NET se produit.

Maintenant, si nous naviguons vers un chemin de fichier statique qui n'existe pas, nous obtiendrons une page d'erreur personnalisée au lieu de la page 404 par défaut d'IIS. Le reste est toujours le même problème 200 qu'avant.

Heureusement, IIS fournit en fait une solution intégrée à ce problème, si vous définissez ResponseMode="File", IIS renverra votre page d'erreur personnalisée sans modifier les en-têtes de réponse d'origine?:

Terminé.

Page d'erreur 500 personnalisée

La majeure partie n'est rien d'autre que de copier la solution ci-dessus et d'ajouter une page d'erreur 500 personnalisée. Il y a quelques choses à noter ici.

標(biāo)準(zhǔn)的 ASP.NET MVC模板內(nèi)置的 HandleErrorAttribute 作為一個(gè)全局過(guò)濾器。捕獲在ASP.NET MVC管道引發(fā)的任何錯(cuò)誤,并返回一個(gè)自定義"錯(cuò)誤"視圖提供你有在web.config中啟用自定義錯(cuò)誤。它會(huì)尋找 ~/views/{controllerName}/error.cshtml 或 ~ / views/shared/error.cshtml。

如果你使用了過(guò)濾器(filter),你需要更新現(xiàn)有的自定義錯(cuò)誤視圖,并不存在的則需要?jiǎng)?chuàng)建(最好放在views/shared文件夾下)

我沒(méi)有看見(jiàn)這個(gè)filter有可以設(shè)置的屬性值,在 MVC 管道引發(fā)的任何異常都會(huì)退回到標(biāo)準(zhǔn)的 ASP.NET 錯(cuò)誤配置頁(yè)面,既然你要設(shè)置那些**那這里就用不到這個(gè)filter。

添加如下自定義錯(cuò)誤頁(yè)配置:

<customErrors mode="On" redirectMode="ResponseRewrite">
 <error statusCode="404" redirect="~/404.aspx"/>
 <error statusCode="500" redirect="~/500.aspx"/>
</customErrors>

類似于前面創(chuàng)建的404.aspx:

<% Response.StatusCode = 500 %>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <title>500 Server Error</title>
</head>
<body>
  <h1>500 Server Error</h1>
</body>
</html>

不幸的是這樣做并不會(huì)捕獲到你應(yīng)用程序中的每一個(gè)異常。一個(gè)相當(dāng)常見(jiàn)的錯(cuò)誤——由 ASP.NET 產(chǎn)生的請(qǐng)求的驗(yàn)證,如一個(gè)危險(xiǎn)的url路徑/foo/bar<script></script> ,這個(gè)實(shí)際上會(huì)產(chǎn)生一個(gè)404響應(yīng);因此你可以添加一個(gè)默認(rèn)錯(cuò)誤配置:

<customErrors mode="Off" redirectMode="ResponseRewrite" defaultRedirect="~/500.aspx">
 <error statusCode="404" redirect="~/404.aspx"/>
 <error statusCode="500" redirect="~/500.aspx"/>
</customErrors>

最后為了捕獲非ASP.NET異常我們?cè)O(shè)置IIS自定義服務(wù)器內(nèi)部錯(cuò)誤500錯(cuò)誤頁(yè)面:


總結(jié)

在你的應(yīng)用程序根目錄創(chuàng)建如下錯(cuò)誤頁(yè)面:

404.html - for IIS
404.aspx - for ASP.NET
500.html - for IIS
500.aspx - for ASP.NET

確認(rèn)您設(shè)置在 ASPX 頁(yè)面內(nèi)的適當(dāng)響應(yīng)狀態(tài)碼.

拋棄 MVC HandleErrorAttribute 全局篩選器;配置 ASP.NET 的自定義錯(cuò)誤:

<customErrors mode="RemoteOnly" redirectMode="ResponseRewrite" defaultRedirect="~/500.aspx">
 <error statusCode="404" redirect="~/404.aspx"/>
 <error statusCode="500" redirect="~/500.aspx"/>
</customErrors>

配置IIS自定義錯(cuò)誤頁(yè):

<httpErrors errorMode="DetailedLocalOnly">
 <remove statusCode="404"/>
 <error statusCode="404" path="404.html" responseMode="File"/>
 <remove statusCode="500"/>
 <error statusCode="500" path="500.html" responseMode="File"/>
</httpErrors>

? ?

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持PHP中文網(wǎng)。


更多ASP.NET MVC自定義錯(cuò)誤頁(yè)面相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1502
276
Concevoir des objets immuables et des structures de données en C # Concevoir des objets immuables et des structures de données en C # Jul 15, 2025 am 12:34 AM

Le c?ur de la conception d'objets immuables et de structures de données en C # est de s'assurer que l'état de l'objet n'est pas modifié après la création, améliorant ainsi la sécurité des threads et la réduction des bogues causés par les changements d'état. 1. Utilisez des champs en lecture et coopérez avec l'initialisation du constructeur pour vous assurer que les champs ne sont attribués que pendant la construction, comme indiqué dans la classe de personne; 2. Encapsulez le type de collection, utilisez des interfaces de collecte immuables telles que ReadOnlyCollection ou Immutablelist pour empêcher une modification externe des collections internes; 3. Utilisez l'enregistrement pour simplifier la définition du modèle immuable et générer des attributs en lecture seule et des constructeurs par défaut, adaptés à la modélisation des données; 4. Il est recommandé d'utiliser System.Collections.imm lors de la création d'opérations de collecte immuables.

écriture du code C # maintenable et testable écriture du code C # maintenable et testable Jul 12, 2025 am 02:08 AM

La clé de la rédaction du code C # est la maintenabilité et la testabilité. Diviser raisonnablement les responsabilités, suivre le principe de responsabilité unique (SRP) et prendre respectivement l'accès aux données, la logique métier et le traitement des demandes par le référentiel, le service et le contr?leur pour améliorer la clarté structurelle et l'efficacité des tests. L'interface polyvalente et l'injection de dépendance (DI) facilitent la mise en ?uvre du remplacement, l'extension des fonctions et les tests de simulation. Les tests unitaires doivent isoler les dépendances externes et utiliser des outils simulés pour vérifier la logique pour assurer une exécution rapide et stable. Standardiser la dénomination et la division de petites fonctions pour améliorer la lisibilité et l'efficacité de maintenance. L'adhésion aux principes de la structure claire, des responsabilités claires et des tests peut améliorer considérablement l'efficacité du développement et la qualité du code.

Création de middleware personnalisés dans ASP.net Core C # Création de middleware personnalisés dans ASP.net Core C # Jul 11, 2025 am 01:55 AM

Créez un middleware personnalisé dans ASP.Netcore, qui peut être implémenté en écrivant des classes et en s'inscrivant. 1. Créez une classe contenant la méthode invokeaSync, gérez httpContext et requestdelegateNext; 2. Inscrivez-vous avec Usemiddleware dans Program.cs. Le middleware convient aux opérations générales telles que la journalisation, la surveillance des performances, la gestion des exceptions, etc. Contrairement aux filtres MVC, il agit sur l'ensemble de l'application et ne s'appuie pas sur le contr?leur. L'utilisation rationnelle du middleware peut améliorer la flexibilité structurelle, mais devrait éviter d'affecter les performances.

Meilleures pratiques pour utiliser Linq en C # efficacement Meilleures pratiques pour utiliser Linq en C # efficacement Jul 09, 2025 am 01:04 AM

Les points suivants doivent être suivis lors de l'utilisation de LINQ: 1. La priorité est donnée à LINQ lors de l'utilisation des opérations de données déclaratives telles que le filtrage, la conversion ou l'agrégation des données pour éviter une utilisation forcée dans des scénarios avec des effets secondaires ou des scénarios critiques de performance; 2. Comprendre les caractéristiques de l'exécution retardée, les modifications de l'ensemble de source peuvent conduire à des résultats inattendus, et les retards ou l'exécution doivent être sélectionnés en fonction des exigences; 3. Faites attention aux frais généraux de performances et de mémoire, les appels de cha?ne peuvent générer des objets intermédiaires et les codes sensibles aux performances peuvent être remplacés par des boucles ou des portées; 4. Gardez la requête concise et facile à lire, et divisez la logique complexe en plusieurs étapes pour éviter une nidification excessive et un mélange de plusieurs opérations.

Plongeon profonde dans les contraintes et covariances génériques C # Plongeon profonde dans les contraintes et covariances génériques C # Jul 12, 2025 am 02:00 AM

Des contraintes génériques sont utilisées pour restreindre les paramètres de type pour assurer un comportement spécifique ou des relations d'héritage, tandis que la covariation permet la conversion du sous-type. Par exemple, où: ICOMPARABLE garantit que t est comparable; La covariation telle que IEnumerable permet à IEnumerable d'être convertie en IEnumerable, mais elle n'est lue et ne peut pas être modifiée. Les contraintes courantes incluent la classe, la structure, new (), la classe de base et l'interface, et plusieurs contraintes sont séparées par des virgules; La covariation nécessite le mot-clé OUT et ne s'applique qu'aux interfaces et délégués, ce qui est différent de l'onduleur (en mot-clé). Notez que la covariance ne prend pas en charge les classes, ne peut pas être convertie à volonté et que les contraintes affectent la flexibilité.

Comprendre C # Async et attendre les pièges Comprendre C # Async et attendre les pièges Jul 15, 2025 am 01:37 AM

Les problèmes communs avec asynchronisation et attendre en C # incluent: 1. Utilisation incorrecte de .Result ou .Wait () provoque une impasse; 2. Ignorer ConfigureAwait (False) provoque des dépendances contextuelles; 3. L'abus d'AsyncVoid provoque un contr?le manquant; 4. L'attente en série affecte les performances de la concurrence. La bonne fa?on est: 1. La méthode asynchrone doit être asynchrone tout le chemin pour éviter le blocage de la synchronisation; 2. L'utilisation de ConfigureAwait (false) dans la bibliothèque de classe est utilisée pour s'écarter du contexte; 3. Utiliser uniquement AsyncVoid dans le traitement des événements; 4. Les taches simultanées doivent d'abord être démarrées, puis attendre pour améliorer l'efficacité. Comprendre le mécanisme et normaliser l'utilisation du code asynchrone qui évite d'écrire un blocage substantiel.

Implémentation d'interfaces courantes avec les méthodes d'extension C # Implémentation d'interfaces courantes avec les méthodes d'extension C # Jul 10, 2025 pm 01:08 PM

L'interface Fluent est une méthode de conception qui améliore la lisibilité du code et l'expressivité à travers les appels de cha?ne. Le noyau est que chaque méthode renvoie l'objet actuel, afin que plusieurs opérations puissent être appelées en continu, comme Varresult = NewstringBuilder (). APPEND ("Hello"). Ajouter (""). Lors de la mise en ?uvre, vous devez combiner la méthode d'extension et le modèle de conception qui le renvoie, tels que la définition de la classe CluentString et le renvoi dans sa méthode, et la création d'une instance initiale via la méthode d'extension. Les scénarios d'application courants incluent la création de configurateurs (tels que les règles de vérification), la vérification

Comment implémenter l'injection de dépendance dans les applications C # Comment implémenter l'injection de dépendance dans les applications C # Jul 16, 2025 am 03:17 AM

La bonne fa?on d'utiliser l'injection de dépendance dans les projets C # est la suivante: 1. Comprendre l'idée principale de DI est de ne pas créer d'objets par vous-même, mais de recevoir des dépendances par le biais de constructeurs pour obtenir un couplage lache; 2. Lors de l'enregistrement des services dans ASP.Netcore, vous devez clarifier le cycle de vie: transitoire, portée, singleton et choisir selon les besoins de l'entreprise; 3. Il est recommandé d'utiliser l'injection de constructeur, et le cadre analysera automatiquement les dépendances, qui conviennent aux contr?leurs et aux services; 4. Les conteneurs intégrés peuvent être utilisés dans de petits projets, et des conteneurs tiers tels que AutoFAC peuvent être introduits dans des scénarios complexes, et l'enregistrement de service personnalisé et la lecture de configuration sont pris en charge. La ma?trise de ces points clés peut aider à améliorer la testabilité, la maintenabilité et l'évolutivité de votre code.

See all articles