2009-06-09 2 views
36

Я хочу вернуть представление() из действия, а результирующий ответ должен иметь тип содержимого text/xml вместо текстового/html по умолчанию.ASP.NET MVC и тип содержимого text/xml

Я попытался следующие, но безуспешно:

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

Я знаю, что вы можете указать тип содержимого, возвращая ContentResult, но это не делает мой взгляд.

Я надеюсь, что мне не нужно отображать представление на строку, а затем использовать return Content(), поэтому я, вероятно, пропустил какой-то простой способ.

+1

Я удивлен, что никто не заметил это как дубликат: http://stackoverflow.com/questions/134905/what-is-the-best-way-to-return- xml-from-a-controllers-action-in-asp-net-mvc –

+0

@TomasLycken, это может быть потому, что сами легенды и я помещаем сам XML в представление и просто желаем установить ContentType для представления, а не для сборки XML в Контроллере, затем передайте его в Вид. Это, безусловно, два разных метода. –

+1

Другим примечанием для всех является то, что на эту строку типа контента можно ссылаться как 'System.Net.Mime.MediaTypeNames.Text.Xml'. – jamiebarrow

ответ

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

Спасибо, ты гений! –

+0

красивый, я не знал, что вы можете установить ContentType на самой странице. Это удивительно: P –

+2

, и если у вас есть вид бритвы, тогда это должно быть '@ {Response.ContentType = System.Net.Mime.MediaTypeNames.Text.Xml; } ' – avs099

0

Вы пытались настроить response.content из метода предварительной визуализации вида на странице codebehind? очевидно, предполагается, что вы используете механизм просмотра веб-форм

+0

У моего представления нет кода. – andreialecu

+0

так что добавьте один ;-). –

+16

: -/Не добавляйте один – Charlino

38

Вам необходимо отобразить строку. Для того, чтобы вернуть текст/XML выполните следующие действия:

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

Ну, я уже знал об этом (указано в вопросе), но я хочу его избежать. – andreialecu

+1

Работает для меня, потому что я хочу вернуть ответ XML без необходимости просмотра страницы aspx. – stephen

1

Вам нужен вид, что не переопределяет вещи и генерировать HTML, в том числе его собственного контекста типа.

Пользовательский вид может непосредственно отображать Response.Write (см. JsonResult в рефлекторе для класса, который очень похож на то, что вам понадобится).

Чтобы преобразовать XML без промежуточной строки, сохраните XML-код в XmlWriter, созданном над Response.Output.

6

Пользователи управления (ASCX) не принимают ContentType = "text/xml".

Решение:

public ActionResult xxx() 
    { 
    Response.ContentType = "text/xml"; 
    return View("xxx.ascx"); 
    } 
Смежные вопросы