web-dev-qa-db-fra.com

Définir l'en-tête «Content-Type» à l'aide de RestSharp

Je crée un client pour un service de lecture RSS. J'utilise la bibliothèque RestSharp pour interagir avec leur API.

L'API indique:

Lors de la création ou de la mise à jour d'un enregistrement, vous devez définir application/json; charset = utf-8 comme en-tête Content-Type.

Voici à quoi ressemble mon code:

RestRequest request = new RestRequest("/v2/starred_entries.json", Method.POST);
request.AddHeader("Content-Type", "application/json; charset=utf-8");
request.RequestFormat = DataFormat.Json;
request.AddParameter("starred_entries", id);

//Pass the request to the RestSharp client
Messagebox.Show(rest.ExecuteAsPost(request, "POST").Content);

Toutefois; le service renvoie "Erreur 415: veuillez utiliser l'en-tête 'Content-Type: application/json; charset = utf-8'." Pourquoi n'est-ce pas? t RestSharp passant l'en-tête?

30
Shane Gowland

La solution fournie sur mon blog n'est pas testée au-delà de la version 1.02 de RestSharp. Si vous soumettez un commentaire sur ma réponse avec votre problème spécifique avec ma solution, je peux le mettre à jour.

var client = new RestClient("http://www.example.com/where/else?key=value");
var request = new RestRequest();

request.Method = Method.POST;
request.AddHeader("Accept", "application/json");
request.Parameters.Clear();
request.AddParameter("application/json", strJSONContent, ParameterType.RequestBody);

var response = client.Execute(request);
55
Itanex

Dans la version 105.2.3.0, je peux résoudre le problème de cette façon:

var client = new RestClient("https://www.example.com");
var request = new RestRequest("api/v1/records", Method.POST);
request.AddJsonBody(new { id = 1, name = "record 1" });
var response = client.Execute(request);

Vieille question mais toujours en haut de ma recherche - ajoutant pour être complet.

30
Tom Elmore

Bien que ce soit un peu ancien: j'ai rencontré le même problème .. semble que certains attributs tels que "type de contenu" ou "date" ne peuvent pas être ajoutés en tant que paramètre mais sont ajoutés en interne. Pour modifier la valeur de "content-type", j'ai dû changer le paramètre serialzer (même si je ne l'ai pas utilisé car j'ai ajouté un json dans le corps qui était sérialisé auparavant!)

RestClient client = new RestClient(requURI);
RestRequest request = new RestRequest(reqPath, method);
request.JsonSerializer.ContentType = "application/json; charset=utf-8";

dès que je l'ai fait, l'en-tête s'est affiché comme prévu:

 System.Net Information: 0 : [5620] ConnectStream#61150033 -   Header 
 {
  Accept: application/json, application/xml, text/json, text/x-json, text/javascript, text/xml
  User-Agent: RestSharp 104.1.0.0
  Content-Type: application/json; charset=utf-8
  ...
 }
9
Marc Wittmann

Vous rencontrez très probablement ce problème: https://github.com/restsharp/restsharp/issues/221 Il existe une solution de travail à votre problème @ http: //itanex.blogspot .co.at/2012/02/restsharp-and-advanced-post-requests.html

3
D.R.
request.XmlSerializer = new DotNetXmlSerializer();
            request.Parameters.Clear();
            request.AddParameter(new Parameter()
            {
                ContentType = "application/xml",
                Name = "application/xml",
                Type = ParameterType.RequestBody,
                Value = request.XmlSerializer.Serialize(deleteUserQuery.UserDelRqHeader)
            });
            request.AddHeader("Accept", "application/xml");
0
Julien Cousineau