ASP.NET WebAPI: Comment contrôler la chaîne de contenu retourné au client?
Dans WebAPI, dis-je retourner une chaîne enroulée dans une réponse HTTP:
return Request.CreateResponse(HttpStatusCode.BadRequest, "Line1 \r\n Line2");
Lors de l'invocation de cette action à partir de jQuery, le texte de la réponse est traitée avant d'être retourné. Ainsi, dans le xhr, j'obtiens quelque chose comme ceci:
function success(xhr) {
alert(xhr.responseText); //alerts ""Line1 \\r\\n Line2""
}
En d'autres termes, la chaîne est enveloppé dans des guillemets, caractères spéciaux obtenir échappé de sorte qu'elles apparaissent dans la sortie (réelles d'alerte est "Ligne1 \r\n Line2", de sorte que les retours à la ligne ne sont pas conservés, mais plutôt codé et illustré dans le texte de la réponse).
Je peux contourner ce problème en supprimant les guillemets et de remplacer les retours à la ligne sur le client comme suit:
var responseText = xhr.responseText.substr(1, xhr.responseText - 2)
.replace('\\r', '\r').replace('\\n', '\n');
Mais est-il une façon de dire WebAPI la façon de chaîne de format des réponses? Par exemple, de ne pas les emballer dans des guillemets, et convertir les caractères échappés?
Vous devez vous connecter pour publier un commentaire.
Cela se produit parce que votre contrôleur est de retour JSON dans lequel les valeurs de chaîne sont cités.
Une solution simple consiste à analyser les
responseText
JSON et puis vous pouvez utiliser la valeur comme prévu:Cette interprète correctement les sauts de ligne/retours chariot.
Sinon, vous pouvez spécifier le
text/plain
type de support dans votre contrôleur:API Web va alors essayer et de charger un type de support approprié formateur pour
text/plain
qui, malheureusement, n'existe pas OOTB. Vous en trouverez une dans WebApiContrib.return Request.CreateResponse(HttpStatusCode.BadRequest, "Line1 \r\n Line2");
Ce que vous êtes après est une coutume MediaTypeFormatter. Il semble que vous souhaitez mettre en place votre propre personnalisé pour la remplacer et existant ou que vous êtes en train de créer un nouveau personnalisée tous ensemble, en fonction de ce que l'en-tête Accept vous vous attendez. La bonne nouvelle est que vous pouvez échanger existants ou à venir avec un nouveau MediaType vous le souhaitez. Quelques lieux qui vont vous aider à commencer peut être trouvé ici:
http://byterot.blogspot.com/2012/04/aspnet-web-api-series-part-5.html
http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters
Oui, j'ai fait cette petite partie que j'ai échangé quelques formateur par défaut par exemple JSON avec une plus rapide, c'est à dire ServiceStack et il fonctionne très bien.