40 votes

ASP.NET MVC et type de contenu text/xml

Je veux retourner une View() depuis une action, et la réponse résultante devrait avoir un type de contenu text/xml au lieu du text/html par défaut.

J'ai essayé ce qui suit, sans succès :

Response.ContentType = "text/xml"; 
return View();

Je sais que vous pouvez spécifier le type de contenu en retournant ContentResult, mais cela ne rend pas ma View.

J'espère ne pas avoir à rendre la vue en tant que chaîne, puis utiliser return Content(), donc je suis probablement en train de négliger une solution simple.

1 votes

Je suis surpris que personne n'ait repéré cela comme un doublon : stackoverflow.com/questions/134905/…

0 votes

@TomasLycken, cela peut être parce que legenden et moi-même incluons directement le XML dans la vue et souhaitons simplement définir le ContentType de la vue, sans construire le XML dans le contrôleur puis le passer à la vue. Ce sont certainement deux méthodes différentes.

1 votes

Une autre remarque pour tout le monde est que cette chaîne de type de contenu peut être référencée comme System.Net.Mime.MediaTypeNames.Text.Xml.

56voto

eu-ge-ne Points 17847
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" 
    ContentType="text/xml" %>

0 votes

Beau, je n'étais pas conscient que vous pouviez définir le ContentType sur la page elle-même. C'est génial :P

2 votes

Et si vous avez une vue razor, alors cela devrait être @{ Response.ContentType = System.Net.Mime.MediaTypeNames.Text.Xml; }

42voto

Alex Points 17262

Vous devez rendre la chaîne. Pour retourner du texte/xml, faites ce qui suit:

return new ContentResult {
    ContentType = "text/xml",
    Content = UTF8.GetString(votreXmlString),
    ContentEncoding = System.Text.Encoding.UTF8
};

0 votes

Eh bien, je le savais déjà (comme précisé dans la question), mais je veux l'éviter.

1 votes

Fonctionne pour moi car je veux renvoyer une réponse XML sans avoir besoin d'une page de vue aspx.

7voto

jmav Points 1643

Le contrôle des utilisateurs (ASCX) n'accepte pas ContentType="text/xml".

Solution:

public ActionResult xxx()
  {
     Response.ContentType = "text/xml";
     return View("xxx.ascx");
  }

1voto

Richard Points 54016

Vous avez besoin d'une vue qui ne remplace pas les choses et génère du HTML, y compris son propre type de contexte.

Une vue personnalisée peut directement être rendue avec Response.Write (voir JsonResult dans Reflector pour une classe très similaire à ce dont vous auriez besoin).

Pour rendre du XML sans chaîne intermédiaire, enregistrez votre XML dans un XmlWriter créé sur Response.Output.

0voto

Joel Martinez Points 22924

Avez-vous essayé de définir le response.content à partir de la méthode pre render de la vue dans la page codebehind ? Cela suppose évidemment que vous utilisez le moteur de vue webform

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X