ASP.NET MVC and text/xml content type

Viewed 40017

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.

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

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
}; 

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

Solution:

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

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.

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

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

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

Related