ASP.NET de Base équivalent de ASP.NET MVC 5 HttpException
Dans ASP.NET MVC 5, vous pouvez jeter un HttpException avec un code HTTP et ce serait la réponse de la sorte:
throw new HttpException((int)HttpStatusCode.BadRequest, "Bad Request.");
HttpException
n'existe pas dans ASP.NET de Base. Quel est l'équivalent de code?
OriginalL'auteur Muhammad Rehan Saeed | 2015-06-25
Vous devez vous connecter pour publier un commentaire.
J'ai mis en place mon propre
HttpException
et le soutien de middleware qui attrape tous lesHttpException
's et les met dans la réponse d'erreur. Un court extrait peut être vu ci-dessous:Vous pouvez utiliser le Passe-partout.AspNetCore package Nuget ou vous pouvez afficher le code source complet sur les points suivants ASP.NET MVC Standard GitHub projet, ou créer un nouveau projet à l'aide de la ASP.NET MVC Réutilisable modèle de projet qui vous permet éventuellement activer cette fonctionnalité lors de la création d'un nouveau projet (suffit de cocher la case pour l'activer).
Mise à jour
Autre chose qui a fonctionné pour moi a été d'utiliser
Response.WriteAsync
pour définir le corps. MerciComme mentionné ci-dessus, j'ai remplacé le bloc catch corps avec:
context.Response.StatusCode = httpException.StatusCode; await context.Response.WriteAsync(httpException.Message);
OriginalL'auteur Muhammad Rehan Saeed
Après un brève conversation avec @davidfowl, il semble que ASP.NET 5 n'a pas cette notion de
HttpException
ouHttpResponseException
que "comme par magie" se tourner vers des messages de réponse.Ce que vous pouvez faire, est crochet dans le ASP.NET 5 pipeline via le MiddleWare, et en créer un qui gère les exceptions pour vous.
Voici un exemple de la le code source de leur gestionnaire d'erreur middleware qui aura pour définir le code d'état de réponse à 500 dans le cas d'une exception de plus le pipeline:
Et vous devez l'enregistrer auprès de
StartUp.cs
:Je suis d'accord, c'est-à fonctionnalité très utile et je l'utilise souvent ainsi. La bonne chose ASP.NET 5 est open source, nous pouvons appliquer cette fonctionnalité nous-mêmes si nous voulons.
Je vais ajouter votre code pour ASP.NET MVC Standard et de l'activer par défaut. Merci pour votre aide.
Vous bienvenue 🙂
Quelle méthode d'extension?
OriginalL'auteur Yuval Itzchakov
Alternativement, si vous voulez juste de retour de l'arbitraire d'un code d'état, et ne sont pas concernés, à l'Exception approche, vous pouvez utiliser
Mise à jour: comme de .NET de Base RC 2, le préfixe Http est supprimée. Il est maintenant:
OriginalL'auteur Jeremy
La
Microsoft.AspNet.Mvc.Controller
de la classe de base expose unHttpBadRequest(string)
surcharge qui prend un message d'erreur à retourner au client. Donc, à partir de l'intérieur de l'action d'un contrôleur, vous pouvez l'appeler:En fin de compte mon nez, dit en privé méthodes appelé à partir d'un contrôleur de l'action doit être entièrement http-compte du contexte et de retourner une
IActionResult
ou d'effectuer une autre petite tâche complètement isolé du fait que c'est à l'intérieur d'un pipeline http. Accordé c'est mon opinion personnelle, mais une classe qui effectue une partie de la logique métier ne devrait pas être de retour codes d'état HTTP, et devrait plutôt être jeter ses propres exceptions qui peuvent être capturés et traduits à l'action de contrôleur de niveau.HttpException
. Le portage est rendu beaucoup plus facile si le même concept est éventuellement mis à disposition.Bien sûr, et je pense qu'il y a effectivement une cale disponible. Je suis venu à cette question, la recherche de la "ASP.NET 5 façons de faire les choses" bien que, et a dû trouver un autre endroit - votre question demande "quel est l'équivalent de code" qui est à mon humble avis conforme à "qu'est-ce que la nouvelle façon de faire cela" - qui est ce que je recherchais. J'ai donc pensé que je voudrais ajouter à cette réponse pour la personne suivante.
De sens, ont un upvote.
Je faisais le Cœur et de le mettre dans mon middleware pour attraper une erreur 404 pour rediriger vers la page d'erreur 404, et est tombé sur un problème là où je voulais jet cette erreur au lieu de 500. Cette réponse m'a mis sur la bonne voie et je suis en utilisant
return NotFound();
que l'action de résultat lorsque certains d'erreur du serveur se produit.OriginalL'auteur lc.