Pour le retour d'un contrôleur Web API 2, je peux renvoyer du contenu avec la réponse si la réponse est OK (état 200) comme ceci:
public IHttpActionResult Get()
{
string myResult = ...
return Ok(myResult);
}
Si possible, je souhaite utiliser les types de résultats intégrés ici lorsque cela est possible: https://msdn.microsoft.com/en-us/library/system.web.http.results(v=vs.118).aspx
Ma question est, pour un autre type de réponse (pas 200), comment puis-je renvoyer un message (chaîne) avec? Par exemple, je peux faire ceci:
public IHttpActionResult Get()
{
return InternalServerError();
}
mais pas ça:
public IHttpActionResult Get()
{
return InternalServerError("Message describing the error here");
}
Idéalement, je veux que cela soit généralisé afin de pouvoir renvoyer un message avec l'une des implémentations de IHttpActionResult.
Dois-je faire cela (et créer mon propre message de réponse):
public IHttpActionResult Get()
{
HttpResponseMessage responseMessage = ...
return ResponseMessage(responseMessage);
}
ou y a-t-il un meilleur moyen?
c#
asp.net-web-api
httpresponse
mayabelle
la source
la source
ApiController.InternalServerError
msdn.microsoft.com/en-us/library/dn292630(v=vs.118).aspxRéponses:
Vous pouvez utiliser ceci:
la source
code
(où le code est une chaîne) dansreturn Content(HttpStatusCode.OK, code)
est encapsulée dans "qui est inattendu, y a-t-il une raison pour ceci? Par exemple la valeur qui est retournée est"\"value\""
j'utilise mvc5Vous pouvez utiliser HttpRequestMessagesExtensions.CreateErrorResponse (
System.Net.Http
namespace), comme ceci:Il est préférable de créer des réponses basées sur la demande pour profiter de la négociation de contenu de l'API Web.
la source
ApiController.Request
est nulle, cela signifie que vous n'êtes pas dans le bon contexte ou que quelque chose est cassé dans votre architecture WebAPI.J'ai fini par choisir la solution suivante:
... qui peut être utilisé comme ceci:
Je suis ouvert aux suggestions d'amélioration. :)
la source
Vous pouvez également faire:
la source
Toute personne intéressée à retourner quelque chose avec n'importe quel code d'état avec le retour de ResponseMessage:
la source
Dans l'API Web ASP.NET 2, vous pouvez encapsuler n'importe lequel
ResponseMessage
dans un ResponseMessageResult :Dans certains cas, cela peut être le moyen le plus simple d'obtenir le résultat souhaité, bien qu'il soit généralement préférable d'utiliser les différents résultats dans System.Web.Http.Results .
la source
Facile:
return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Your message"));
N'oubliez pas de référencer System.Net.Http et System.Net .
la source
Je recommanderais de lire cet article. Il existe des tonnes de façons d'utiliser HttpResponse existant comme suggéré, mais si vous souhaitez profiter de Web Api 2, envisagez d'utiliser certaines des options IHttpActionResult intégrées telles que
ou
Choisissez le bon type de retour pour les contrôleurs Web Api
la source
Un exemple plus détaillé avec prise en charge du code HTTP non défini en C #
HttpStatusCode
.Content
est une méthode virtuelle définie dans la classe abstraiteApiController
, la base du contrôleur. Voir la déclaration ci-dessous:la source
@mayabelle vous pouvez créer IHttpActionResult concret et encapsuler ce code comme ceci:
la source
J'ai eu le même problème. Je veux créer un résultat personnalisé pour mes contrôleurs api, pour les appeler comme
return Ok("some text");
Ensuite, j'ai fait ceci: 1) Créer un type de résultat personnalisé avec singletone
2) Créez un contrôleur personnalisé avec une nouvelle méthode:
Et puis je peux les appeler dans mes contrôleurs, comme ceci:
la source
cette réponse est basée sur la réponse de Shamil Yakupov, avec un objet réel au lieu d'une chaîne.
la source
Pour les exceptions, je fais habituellement
la source
Les choses ci-dessus sont vraiment utiles.
Lors de la création de services Web, si vous prenez le cas des services consommateur sera grandement apprécié. J'ai essayé de maintenir l'uniformité de la sortie. Vous pouvez également donner une remarque ou un message d'erreur réel. Le consommateur du service Web ne peut que vérifier IsSuccess true ou non, il sera sûr qu'il y a un problème et agira selon la situation.
Vous êtes invités à donner des suggestions le cas échéant :)
la source
Désolé pour la réponse tardive, pourquoi ne pas utiliser simplement
return BadRequest("your message");
Je l'utilise pour tous mes
IHttpActionResult
erreurs, il fonctionne bienvoici la documentation: https://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.badrequest(v=vs.118).aspx
la source
400
réponse serait inappropriée. OP a spécifiquement donné une500
réponse à titre d'exemple.