Si vous héritez de la base NegotitatedContentResult<T>
, comme mentionné, et que vous n'avez pas besoin de transformer votre content
(par exemple, vous voulez simplement renvoyer une chaîne), vous n'avez pas besoin de remplacer la ExecuteAsync
méthode.
Tout ce que vous avez à faire est de fournir une définition de type appropriée et un constructeur qui indique à la base le code d'état HTTP à renvoyer. Tout le reste fonctionne.
Voici des exemples pour les deux NotFound
et InternalServerError
:
public class NotFoundNegotiatedContentResult : NegotiatedContentResult<string>
{
public NotFoundNegotiatedContentResult(string content, ApiController controller)
: base(HttpStatusCode.NotFound, content, controller) { }
}
public class InternalServerErrorNegotiatedContentResult : NegotiatedContentResult<string>
{
public InternalServerErrorNegotiatedContentResult(string content, ApiController controller)
: base(HttpStatusCode.InternalServerError, content, controller) { }
}
Et puis vous pouvez créer des méthodes d'extension correspondantes pour ApiController
(ou le faire dans une classe de base si vous en avez une):
public static NotFoundNegotiatedContentResult NotFound(this ApiController controller, string message)
{
return new NotFoundNegotiatedContentResult(message, controller);
}
public static InternalServerErrorNegotiatedContentResult InternalServerError(this ApiController controller, string message)
{
return new InternalServerErrorNegotiatedContentResult(message, controller);
}
Et puis, ils fonctionnent comme les méthodes intégrées. Vous pouvez soit appeler l'existant, NotFound()
soit appeler votre nouvelle coutumeNotFound(myErrorMessage)
.
Et bien sûr, vous pouvez vous débarrasser des types de chaînes "codés en dur" dans les définitions de type personnalisées et les laisser génériques si vous le souhaitez, mais vous devrez peut- être vous inquiéter de ExecuteAsync
ce que vous<T>
réellement.
Vous pouvez consulter le code source pour NegotiatedContentResult<T>
voir tout ce qu'il fait. Il n'y a pas grand-chose à faire.