2009-06-09 60 views
36

我想從一個動作返回一個View(),並且得到的響應應該具有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 – 2009-06-22 12:52:04

+0

@TomasLycken,這可能是因爲legenden和我自己把XML本身放在View中,只是希望設置View的ContentType,而不是構建XML然後在Controller中傳遞給View。這絕對是兩種不同的方法。 – 2013-09-11 20:34:15

+1

另一個給大家的說明是這個內容類型字符串可以被引用爲`System.Net.Mime.MediaTypeNames.Text.Xml`。 – jamiebarrow 2013-11-04 15:07:34

回答

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

您是否嘗試過在代碼隱藏頁面中設置來自視圖的預渲染方法的response.content?這顯然假設你正在使用webform視圖引擎

+0

我的看法沒有隱藏代碼。 – andreialecu 2009-06-09 18:58:30

38

你需要呈現字符串。要返回文本/ XML執行以下操作:

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

你需要不替換的東西,生成HTML,包括它自己的上下文型的視圖。

自定義視圖可以直接呈現給Response.Write(請參閱Reflector中的JsonResult,該類與您需要的類非常相似)。

要在沒有中間字符串的情況下呈現XML,請將您的XML保存到通過Response.Output創建的XmlWriter

6

用戶控件(ASCX)不接受ContentType =「text/xml」。

解決方案:

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