2012-03-28 14 views
0

mvcで一般的なエクスポート操作を構築しようとしています。だから私はこれのためのコントローラを書いた。別のコントローラのコントローラからデータを取得

[AcceptVerbs(HttpVerbs.Post)] 
public string Excel(FormCollection collection) 
{ 
    string dataUrl = collection["dataUrl"]; 
    string filter = collection["filter"]; 
    //Get data from dataUrl 
    ... 
} 

私の問題は、私は、データがPOSTを経由してそのメソッドに同じパラメータを渡すことにより、別のコントローラから転送されるように取得したいです。

この

は、事前にデータ

[AcceptVerbs(HttpVerbs.Post)] 
public JsonResult List(FormCollection collection) 
{ 
    ... 
    return Json(data); 
} 

感謝のためのサンプル方法です。

+0

なぜそれが必要ですか?なぜそのロジックを別のクラスに持たず、両方のコントローラーから呼び出すのでしょうか? – ivowiblo

+0

私は多くのコントローラを持っていて、そのすべてを変更したくありません。 –

+0

MVC3を使用していると仮定すると、(100%の質問には関係しませんが)別の提案は、FormCollectionの使用をやめ、デフォルトのモデルバインド機能を使用し、ソリューションから実際のドメインオブジェクトを使用することです。これにより、実際のエクスポートを行うための異なるサービス/ユーティリティークラスを持つことが容易になり、コントローラー内のコードが少なくなります。 – Uchitha

答えて

1

エクスポートコードをユーティリティクラスにリファクタリングして、両方のコントローラから使用するのはなぜですか?

0

あなたは絶対にあなたがそうのようにHttpWebRequestのを使用することができるコントローラに、コントローラを呼び出す必要がありますと仮定:これは非常に非効率的である

public void CallController() 
    { 
     var request = (HttpWebRequest)WebRequest.Create("http://yoursite.com/Excel"); 
     request.Method = "POST"; 

     using (var dataStream = request.GetRequestStream()) 
     { 
      //write your data to the data stream 
      using (var response = (HttpWebResponse)request.GetResponse()) 
      { 
       if (response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.TemporaryRedirect) 
       { 
        //work with the controller response 
       } 
      } 
     } 
    } 

あなたは、両方のコントローラに外部のクラスにコードをリファクタリングすることができます。

+0

私はこれを試しました。ところで、リファクタリングコードでは、すべてのデータメソッドに対して別のコントローラメソッドを追加することは私にとっては良い解決策ではありません。 –

+0

ビューとgetメソッドを持たないポストメソッドとしてコントローラを公開します。次に、あなたのメソッドの周りの認証を削除することができます。 – BentOnCoding

+0

認証なしでコントローラメソッドを公開することが本当に心配だった場合は、何らかのトークンセキュリティハンドシェイクを行うことができますが、それはこの質問の範囲外です。 – BentOnCoding

関連する問題