3

我有一個ASP.Net Web API項目,它已經包含控制器以JSON格式返回結果。現在我必須添加新的控制器,它應該只接收和返回XML。我知道我可以使用下面的選項推控制器返回XML序列化對象:ASP.Net Web API。一個項目中的JSON和XML響應

GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true 

但是,如果我這樣做,我想到的是,舊的控制器也將返回XML格式的數據,對不對?這不是我所需要的。那麼,我如何才能實現我的目標並僅從一些控制器返回XML序列化對象?謝謝。

UPDATE

我曾嘗試建議的方法,但它並沒有爲我工作。我正在使用Fiddler進行測試。請注意這個結果仍然是JSON(最後截圖)下面是其他信息:

控制器:

Controller

Request類:

Request class

Response類:

Response class

請求在提琴手:在提琴手

Request in Fiddler

響應:

Response in Fiddler

回答

4

內容協商或序列號是不是管制員應予以關注。

開箱即用ASP.NET Web API可以返回XML和JSON內容,客戶端可以通過設置Accept HTTP標頭來請求特定的格式。

將其設置爲:

Accept: application/json 

,如果你想獲得JSON回來

Accept: application/xml 

,如果你想獲得對XML的支持

編輯: 還要注意在默認情況下該Web API使用DataContractSerializer,在您的評論中回答問題:

[DataContract(Namespace = "schemas.datacontract.org/2004/07/Test.Models")] 
public class TheThing 
{ 
    [DataMember] 
    public string Name { get; set; } 
    [DataMember(Name = "contentname")] 
    public string ContentName { get; set; } 
} 
+0

謝謝你的回答。我已經刪除了強制XML序列化的行(在原始問題中提到過)。但現在我發現XML序列化忽略了設置XML元素名稱的屬性:[XmlElement(「contentname」)] public string ContentName {get;組; }我能以某種方式修復它嗎? – Antipod 2013-03-11 21:16:32

+0

我也想在我的XML響應中避免以下屬性:xmlns:i =「http://www.w3.org/2001/XMLSchema-instance」and xmlns =「http://schemas.datacontract.org/ 2004/07/Test.Models「 – Antipod 2013-03-11 21:25:19

+0

Piotr Walat,謝謝你的答案中的編輯部分。不幸的是,它不適合我。我不知道爲什麼。我用一些截圖更新了我的原始問題。 – Antipod 2013-03-11 22:29:14

0

我已經運行了一些接受不起作用的API。我對那些API發現,如果接受的是不工作的,如果我設置「的Content-Type」頭

Content-Type: application/xml

這將導致控制器以實物與XML響應響應。

它確實出現在Webapi2中,Accept頭現在會導致控制器返回預期的application/xml響應。這可能是WebAPI早期版本的問題。

相關問題