2011-06-27 8 views
0

MVC2アプリケーションからXML出力を作成してクライアントに返すにはどうすればいいですか(おそらくXSDスキーム検証も使用しています)?ASP.netでXMLデータを返すためのベストプラクティスMVC2

私はコントローラから直接返すことはできませんし、変数などとして表示することはできません。私のアプリケーションの巨大な部分は、さまざまなXMLソース、スキーマ、フォーマット間の変換を行っています。始まり。

しかし、それを行うには良い方法がありますか?

ありがとうございます!

+0

'XMLレンダリングされた出力'という意味を具体的に説明できますか? (色の書式設定、字下げなどでXMLを表示したいですか?) –

+0

おっと、ごめんなさい、ちょっと混乱しています。 –

答えて

4

ビューモデルをXMLにシリアル化するカスタムActionResultを書くことができます。行の中で何か:その後、

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

あなたはExecuteResultメソッド内で必要になる場合がありますことを...など、任意のXSD検証を行うこと自由に感じています。あなたが必要として自分自身を見つける場合、これは言われている

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

:その後、

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

と:コメント欄に@Robert Koritnikによって示唆されるように

あなたはまた、拡張メソッドを書くことができWCFを使用すると思われる多くのXMLを交換します。 POXが必要な場合は、WCF RESTを検討してください。

+0

コントローラー拡張メソッド 'Xml()'を追加することで、既存の*結果*。そうすれば、他のアクション結果と同様に、 'return Xml(model);'と書くだけです。 –

+0

ここに+1して自分の答えを削除すると、あなたが追加している間にポップアップされました。 @ Robertのコメントに 'XmlSerializer' *または*' DataContractSerializer'のサポートが考えられるかもしれません。 –

+1

@Robert Koritnik、素敵な提案、私はそれを考慮に入れて私の答えを更新しました。 –

関連する問題