Mon beau site WebService fonctionne bien. Sauf si je visitant des pages comme Exemple de demande: P> ~ / code>, qui renvoie la page de défaut IIS 403 défectueuse (même en utilisant Fiddler et spécifiant uniquement
Accepter: Application / JSON code>). Je ne veux que JSON ou Erreurs XML. Existe-t-il un moyen de remplacer toutes les exceptions avec un gestionnaire d'exception personnalisé? ou un contrôleur par défaut pour gérer toutes les demandes inconnues? Quel est le moyen le plus simple et le plus correct (si différent), de gérer cela afin que les clients n'ont besoin que d'analysser les datagrammes XML Datagrammes XML API ou JSON BLOBS?
HTTP/1.1 403 Forbidden
Cache-Control: private
Content-Type: application/json; charset=utf-8
Date: ...
Content-Length: ....
{
"error":"forbidden",
"status":403,
"error_description":"Directory listing not allowed."
}
3 Réponses :
Dans IIS Manager, vous pouvez modifier les erreurs personnalisées : p>
Ouvrez le gestionnaire IIS et accédez au niveau que vous souhaitez gérer. Pour Informations sur l'ouverture du gestionnaire IIS, voir Open IIS Manager (IIS 7). Pour plus d'informations sur la navigation sur les emplacements de l'interface utilisateur, voir Navigation dans le gestionnaire IIS (IIS 7). P>
Dans la vue Caractéristiques, double-cliquez sur Pages d'erreur. P>
sur la page Pages d'erreur, cliquez pour sélectionner l'erreur que vous souhaitez modifier. p>
Dans le volet Actions, cliquez sur Modifier. P>
Dans la boîte de dialogue Modifier la page d'erreur personnalisée, sélectionnez l'une des opérations suivantes: Insérez le contenu du fichier statique dans la réponse d'erreur si votre erreur Le contenu est statique, tel qu'un fichier .html. p>
exécuter une URL sur ce site si votre contenu d'erreur est dynamique, tel que un fichier .asp. p>
Répondre avec une redirection 302 si vous redirigez un navigateur client à une URL différente. p>
Dans la zone de texte chemin du fichier, tapez le chemin de la page d'erreur personnalisée si Insérer le contenu du fichier statique dans la réponse d'erreur est le choisi Type de chemin. Si vous utilisez l'URL exécutée sur ce site ou réagir avec un type de chemin de redirection 302, tapez à la place, l'URL de la coutume Page d'erreur. Cliquez sur OK. P> blockQuote>
Voir aussi ESCRIPTION DE RUCT STRAHL qui possède des captures d'écran. P>
Cependant, je ne pense pas que cela abordera l'en-tête de type de contenu dans la réponse - il explique simplement comment modifier la partie contenu em>, que vous pourriez passer au format JSON. Je ne sais pas comment modifier cela sans faire quelque chose de plus personnalisé, mais certains clients seront en mesure de gérer le mauvais type de contenu si le contenu est toujours JSON, cela peut donc être suffisant (et si oui, peut être votre option la plus simple). . Donc, ce n'est pas une réponse complète, mais cela peut vous aider. P>
Il existe d'autres options à forte intensité de code - comme un module HTTP personnalisé ou à l'aide de code côté serveur / config (tel que.net) pour gérer toutes les demandes et construire la réponse correcte + des en-têtes (voir
asp.net réécrit les erreurs personnalisées N'envoyez pas l'en-tête de type contenu a> ou http://www.iis.net/learn/develop/runtime-extaturbilité/developing-iis-modules-and-handlers-with-net-framework ). P>
edit 1/26/14: strong> Microsoft vient d'ajouter " Global Erreur Manipulation " à la dernière mise à jour webapi 2.1. OK, je pense que je l'ai. Il y en a quelques parties. P> Premier: Créez un contrôleur pour vos erreurs. J'ai nommé mes actions selon les codes d'erreur HTTP. P> suivant, j'ai créé un
genicexceptionfilterattribute code> qui vérifie si le httpActionExecuteContext.Exception est peuplé et si la réponse est toujours vide. Si les deux cas sont tristes, il génère une réponse. P>
<configuration>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>
+1 grande réponse. Il serait encore meilleur si vous avez inclus le code que vous avez utilisé pour le ExceptionnelFilterattribute code>.
Merci @brianrogers, je l'ai ajouté ci-dessus. Aussi une note sur le travail de Microsoft dans cette zone dans WebAPI 2.1.
La manipulation des erreurs mondiales de MS ne semble pas attraper 400 403 404, etc. Erreurs pour moi. En outre, CreateErrrrrrrorinPoreSonse semble être obsolète.
@ Mark13426: La cache est une option IIS (mise en cache dynamique). Je mettrai à jour cette réponse lorsque je passerai le temps de passer à la dernière version de webapi.
C'est génial, comment se fait-il qu'il n'y a pas comme ça oob toujours 4 ans plus tard? Utilisez-vous toujours cela avec des projets WebAPI2? PS avec IIS7 et au-dessus de son non recommandé de
@Jeremythompson: je voudrais. Erreurs par défaut IIS sur HTML lisible par l'homme. Si vous souhaitez des erreurs de repos adaptées aux API, vous devez le remplacer.
Cela peut ne pas fonctionner dans tous les cas, mais le plus.
Une solution plus facile:
<system.webServer> <httpErrors errorMode="Detailed" /> </system.webServer>