2011-06-27 25 views
0

我想知道從MVC2應用程序創建XML輸出並將其返回給客戶端(可能還使用XSD方案驗證)的最佳方法是什麼?在ASP.net中返回XML數據的最佳做法MVC2

我知道我不能直接從控制器返回它或傳遞查看作爲變量等我的應用程序的大部分是做不同的XML來源,模式和格式之間的轉換,所以這是非常重要的,我設置這個權利從開始。

但是有沒有更好的方法來做到這一點?

在此先感謝!

+0

你能詳細說明'XML呈現輸出'是什麼意思嗎? (你想顯示顏色格式,縮進等XML?) –

+0

oooh對不起,我現在看到它有點混淆 –

回答

4

您可以編寫一個自定義的ActionResult,將視圖模型序列化爲XML。在電線之間的東西:

public class XmlResult : ActionResult 
{ 
    private readonly object _model; 
    public XmlResult(object model) 
    { 
     _model = model; 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     if (_model != null) 
     { 
      var response = context.HttpContext.Response; 
      var serializer = new XmlSerializer(_model.GetType()); 
      response.ContentType = "text/xml"; 
      serializer.Serialize(response.OutputStream, _model); 
     } 
    } 
} 

然後:

public ActionResult Foo() 
{ 
    SomeViewModel model = ... 
    return new XmlResult(model); 
} 

隨意執行任何XSD驗證,等等,你可能需要ExecuteResult方法內。如果你發現自己在需要的

public ActionResult Foo() 
{ 
    SomeViewModel model = ... 
    return this.Xml(model); 
} 

這是說:

正如在評論部分建議由@Robert Koritnik你也可以寫一個擴展方法:

public static class ControllerExtensions 
{ 
    public static ActionResult Xml(this ControllerBase controller, object model) 
    { 
     return new XmlResult(model); 
    } 
} 

,然後交換大量的XML,你可能會考慮使用WCF。如果您需要POX,請考慮WCF REST。

+0

我建議也添加一個控制器擴展方法'Xml()',所以它會更符合現有的* *的結果。然後可以簡單地寫:'返回Xml(model);'與其他操作結果類似。 –

+0

+1在這裏,並刪除我自己的答案,因爲你在我添加它時彈出了。我會添加@ Robert的評論,支持'XmlSerializer' *或*'DataContractSerializer'可能是一個想法。 –

+1

@Robert Koritnik,很好的建議,我已經更新了我的答案,並將其考慮在內。 –

相關問題