J'ai ajouté une sortie formatée et une entrée formatée pour xml pour ma solution API
//add formatter to support XML media type results(application/xml)
setupAction.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());
//add formatter to support XML media type request(application/xml)
setupAction.InputFormatters.Add(new XmlDataContractSerializerInputFormatter());
Mais quand je fais une demande en utilisant un en-tête d'acceptation de application / xml j'obtiens un 406 est-ce que quelqu'un d'autre a rencontré ceci?
Le type de contenu est application / json
---- FIXE ----
Si l'objet renvoyé par l'action du contrôleur a un constructeur et que l'en-tête d'acceptation est application / xml, la réponse sera un 406. Il suffit de supprimer le constructeur et je pourrais retourner XML.
3 réponses
Ré. "Si l'objet renvoyé par l'action du contrôleur a un constructeur et que l'en-tête d'acceptation est application / xml, la réponse sera un 406." En fait, ce n'est pas correct. Correction: "Si l'objet renvoyé par l'action du contrôleur a un constructeur qui prend des arguments, et que l'objet n'a pas non plus de constructeur à argument 0, et que l'en-tête d'acceptation est application / xml, la réponse sera un 406. "
Actually, I had the same problem, In my case I have a relationship in my tables, so, Entity Framework create a IEnumerable<Class> when you have HasMany, so what I did was just change my code
from:
public ICollection<Credential> Credential { get; set; }
to:
public List<Credential> Credential { get; set; }
and Constructor from:
public Personal()
{
Credential = new HashSet<Credential>();
}
to:
public Personal()
{
Credential = new List<Credential>();
}
J'ai eu le même problème (.Net Core 2.2).
En raison de la remarque sur cette page: https://docs.microsoft.com/en-us/aspnet/core/web-api/advanced/formatting?view=aspnetcore-2.2
J'ai vérifié que mon contrôleur hérite de Controller et que ma méthode retournait IActionResult. C'était le cas.
Au début, j'ai ajouté ce formateur de sortie:
setupAction.OutputFormatters.Add(new XmlSerializerOutputFormatter());
Cela ne fonctionnait pas même si les formateurs étaient dans la liste des formateurs de sortie et avec le bon MediaType.
Ensuite, j'ai changé pour utiliser la méthode .Net 2.2 préférée:
services.AddMvc(setupAction =>
{
...
})
.AddXmlSerializerFormatters();
Toujours pas de succès.
Je suis retourné à "l'ancienne" manière et j'ai supprimé AddXmlSerializerFormatters () et ajouté
setupAction.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());
C'est à dire. Utilisation de XmlDataContractSerializerOutputFormatter au lieu de XmlSerializerOutputFormatter.
Et puis ça a marché.
Je passe un certain temps à comprendre les différences et je suppose que XmlSerializerOutputFormatter peut écrire le type d'objet qui est IEnumerable et que Customer est un POCO sans constructeur.
C'est ce qui est dans le journal à l'aide de XmlSerializerOutputFormatter Microsoft.AspNetCore.Mvc.Infrastructure.DefaultOutputFormatterSelector: Avertissement: Aucun formateur de sortie n'a été trouvé pour le type de contenu 'application / xml' pour écrire la réponse. Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor: Avertissement: aucun formateur de sortie n'a été trouvé pour le type de contenu 'application / xml' pour écrire la réponse.
De nouvelles questions
xml
XML (Extensible Markup Language) est un format de document structuré définissant les règles de codage de texte. Lorsque vous utilisez cette balise, incluez des balises supplémentaires telles que le langage de programmation, les ensembles d'outils, les technologies XML utilisées et d'autres balises décrivant l'environnement du problème publié. La flexibilité XML se prête à une grande variété d'utilisations pour le transfert de données humaines et machine, soyez donc spécifique en ce qui concerne les outils et les bibliothèques.