2009-06-09 4 views
36

Je souhaite renvoyer un View() à partir d'une action et la réponse résultante doit avoir un type de contenu text/xml au lieu du texte/html par défaut.ASP.NET MVC et le type de contenu text/xml

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 mon point de vue. Je souhaite que je n'ai pas besoin de rendre la vue à une chaîne, puis utiliser return Content(), donc je suis probablement en train de négliger un moyen facile.

+1

Je ne suis pas surpris un aperçu cela comme un doublon: http://stackoverflow.com/questions/134905/what-is-the-best-way-to-return- xml-from-a-controllers-action-in-asp-net-mvc –

+0

@TomasLycken, c'est peut-être parce que legenden et moi-même mettons le XML lui-même dans la vue et souhaitons juste définir le ContentType de la vue, pas compiler XML dans le contrôleur, passez-le à la vue. Ce sont définitivement deux méthodes différentes. –

+1

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'. – jamiebarrow

Répondre

54
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" 
    ContentType="text/xml" %> 
+0

Merci, vous êtes un génie! –

+0

belle, je n'étais pas au courant que vous pourriez définir le ContentType sur la page elle-même. C'est génial: P –

+2

et si vous avez une vue rasoir, alors il devrait être '@ {Response.ContentType = System.Net.Mime.MediaTypeNames.Text.Xml; } ' – avs099

0

Avez-vous essayé de définir le answer.content à partir de la méthode pre render de la vue dans la page codebehind? c'est évidemment en supposant que vous utilisez le moteur de vue webform

+0

Ma vue n'a pas codebehind. – andreialecu

+0

alors ajoutez-en un ;-). –

+16

: -/Ne pas ajouter un – Charlino

38

Vous devez rendre la chaîne. Pour revenir text/xml procédez comme suit:

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

Eh bien, je le savais déjà (spécifié dans la question), mais je veux l'éviter. – andreialecu

+1

Fonctionne pour moi parce que je veux retourner une réponse XML sans avoir besoin d'une page View aspx. – stephen

1

Vous avez besoin d'une vue qui ne l'emporte pas sur les choses et générer du HTML, y compris son propre type de contexte.

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

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

6

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

Solution:

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