web-dev-qa-db-fra.com

Renvoyer une chaîne JSON explicitement à partir de Asp.net WEBAPI?

Dans certains cas, j'ai NewtonSoft JSON.NET et dans mon contrôleur, je renvoie simplement le Jobject depuis mon contrôleur et tout va bien.

Mais j’ai un cas où j’obtiens du JSON brut d’un autre service et que je dois le renvoyer depuis mon WebAPI. Dans ce contexte, je ne peux pas utiliser NewtonSOft, mais si je le pouvais, je créerais un JOBJECT à partir de la chaîne (ce qui semble être un temps de traitement inutile) et le renverrais, et tout irait bien pour le monde.

Cependant, je souhaite renvoyer ceci simplement, mais si je renvoie la chaîne, le client reçoit un wrapper JSON avec mon contexte en tant que chaîne codée.

Comment puis-je explicitement renvoyer un JSON à partir de ma méthode de contrôleur WebAPI?

83
klumsy

Il y a quelques alternatives. La plus simple consiste à faire en sorte que votre méthode retourne un HttpResponseMessage et crée cette réponse avec un StringContent en fonction de votre chaîne, quelque chose de similaire au code ci-dessous:

public HttpResponseMessage Get()
{
    string yourJson = GetJsonFromSomewhere();
    var response = this.Request.CreateResponse(HttpStatusCode.OK);
    response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json");
    return response;
}

Et vérifier la chaîne JSON nulle ou vide

public HttpResponseMessage Get()
{
    string yourJson = GetJsonFromSomewhere();
    if (!string.IsNullOrEmpty(yourJson))
    {
        var response = this.Request.CreateResponse(HttpStatusCode.OK);
        response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json");
        return response;
    }
    throw new HttpResponseException(HttpStatusCode.NotFound);
}
190
carlosfigueira

Voici la solution de @ carlosfigueira adaptée pour utiliser l'interface IHttpActionResult introduite avec WebApi2:

public IHttpActionResult Get()
{
    string yourJson = GetJsonFromSomewhere();
    if (string.IsNullOrEmpty(yourJson)){
        return NotFound();
    }
    var response = this.Request.CreateResponse(HttpStatusCode.OK);
    response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json");
    return ResponseMessage(response);
}
6
Jpsy

Si vous voulez spécifiquement renvoyer ce JSON uniquement, sans utiliser les fonctionnalités WebAPI (comme autoriser XML), vous pouvez toujours écrire directement dans la sortie. En supposant que vous hébergez ceci avec ASP.NET, vous avez accès à l’objet Response, vous pouvez donc l’écrire de cette façon sous forme de chaîne. Vous n’avez donc pas besoin de renvoyer quoi que ce soit de votre méthode - vous avez déjà écrit le texte de la réponse dans le flux de sortie.

2
Joe Enos

exemple de retour de données JSON à partir de la méthode web api GET

[HttpGet]
public IActionResult Get()
{
            return Content("{\"firstName\": \"John\",  \"lastName\": \"Doe\", \"lastUpdateTimeStamp\": \"2018-07-30T18:25:43.511Z\",  \"nextUpdateTimeStamp\": \"2018-08-30T18:25:43.511Z\");
}
0
Muni Chittem