Existe-t-il un moyen de forcer ASP.NET Web API à renvoyer du texte brut?


Answers

  • Veillez à ne pas utiliser le contexte dans l'API Web ASP.NET ou vous serez tôt ou tard désolé. La nature asynchrone de l'API Web ASP.NET rend l'utilisation de HttpContext.Current une responsabilité.
  • Utilisez un formateur de texte en clair et ajoutez à vos formateurs. Il y en a des dizaines autour d'eux. Vous pourriez même écrire le vôtre facilement. WebApiContrib a un.
  • Vous pouvez le forcer en définissant l'en-tête de type de contenu sur httpResponseMessage.Headers sur text/plain dans votre contrôleur, à condition que vous ayez enregistré le formatage de texte brut.
Question

J'ai besoin d'obtenir une réponse en texte brut à partir d'un contrôleur ASP.NET Web API.

J'ai essayé de faire une demande avec Accept: text/plain mais ça ne semble pas faire l'affaire. De plus, la demande est externe et hors de mon contrôle. Ce que je voudrais accomplir est d'imiter l'ancienne façon ASP.NET:

context.Response.ContentType = "text/plain";
context.Response.Write("some text);

Des idées?

EDIT, solution : Sur la base de la réponse d'Aliostad, j'ai ajouté le WebAPIContrib texte WebAPIContrib , initialisé dans l'Application_Start:

  config.Formatters.Add(new PlainTextFormatter());

et mon contrôleur a fini par quelque chose comme:

[HttpGet, HttpPost]
public HttpResponseMessage GetPlainText()
{
  return ControllerContext.Request.CreateResponse(HttpStatusCode.OK, "Test data", "text/plain");
}



Lorsque Accept: text / plain ne fonctionne pas, il n'y a pas de formateur enregistré pour les types de texte mime.

Vous pouvez vous assurer qu'il n'y a pas de formateurs pour le type mime spécifié en obtenant la liste de tous les formateurs pris en charge à partir de la configuration du service.

Créez un formateur de type de support très simple prenant en charge les types de texte mime.

http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters




Une extension comme la suivante peut réduire le nombre de lignes et embellir votre code:

public static class CommonExtensions
{
    public static HttpResponseMessage ToHttpResponseMessage(this string str)
    {
        var resp = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new StringContent(str, System.Text.Encoding.UTF8, "text/plain")
        };

        return resp;
    }
}


Vous pouvez maintenant utiliser l'extension définie dans votre Web API :

public class HomeController : ApiController
{
    [System.Web.Http.HttpGet]
    public HttpResponseMessage Index()
    {
        return "Salam".ToHttpResponseMessage();
    }
}


En routant {DOMAIN}/api/Home/Index vous pouvez voir le texte brut suivant:

MyPlainTextResponse