40

I want to return a View() from an action, and the resulting response should have a content type of text/xml instead of the default text/html.

I have tried the following, with no success:

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

I know that you can specify the content type by returning ContentResult, but that doesn't render my View.

I'm hoping I don't need to render the view to a string then use return Content(), so I'm probably overlooking some easy way.

3
  • 1
    I'm surprised no one spotted this as a duplicate: stackoverflow.com/questions/134905/… Commented Jun 22, 2009 at 12:52
  • @TomasLycken, it may be because legenden and myself are putting the XML itself in the View and just desiring to set the ContentType of the View, not build XML in the Controller then pass it to the View. These are definitely two different methods. Commented Sep 11, 2013 at 20:34
  • 1
    Another note to everyone is that this content type string can be referenced as System.Net.Mime.MediaTypeNames.Text.Xml. Commented Nov 4, 2013 at 15:07

6 Answers 6

56
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" 
    ContentType="text/xml" %>
Sign up to request clarification or add additional context in comments.

2 Comments

beautiful, I wasn't aware that you could set the ContentType on the page itself. This is awesomeness :P
and if you have razor view, then it should be @{ Response.ContentType = System.Net.Mime.MediaTypeNames.Text.Xml; }
42

You need to render the string. To return text/xml do the following:

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

2 Comments

Well, I already knew about this (specified in the question), but I want to avoid it.
Works for me because I want to return an XML response without the need for an aspx View page.
7

Users control (ASCX) doesn't accept ContentType="text/xml".

Solution:

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

Comments

1

You need a view that doesn't override things and generate HTML, including its own context-type.

A custom view can directly render to Response.Write (see JsonResult in Reflector for a class that is very similar to what you would need).

To render XML without a intermediate string, save your XML to an XmlWriter created over Response.Output.

Comments

1

If you're looking for Razor (.cshtml) view then set content type in the view code:

@{
    Response.ContentType = "text/xml";
}

Comments

0

Have you tried setting the response.content from the view's pre render method in the codebehind page? that's obviously assuming you're using the webform view engine

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.