2016-04-05 4 views
3

コントローラのメソッドでオブジェクトのリストを返し、結果をブラウザに返す前に何かするにはどうすればよいですか?ASP.NET MVC4コントローラメソッドは、C#でJSONの代わりに具体的な型を返します

コントローラメソッドの戻り値の型をJsonResultからListに変更すると、要求の結果の型 "System.Collections.Generic.List`1 [MyObject]"が返されます。

私はカスタム結果フィルタで処理しようとしていますが、結果がフィルタOnResultExecutedメソッドに渡されると、それはすでに上記のテキストにjsonifiedされています。メソッドから返されたリストを取得して変更するために、OnResultExecutingメソッドでできることはありますか?

ありがとうございます!

+0

「JsonResult」に渡す前に、アクション/メソッドのオブジェクトを変更しないでください。 – Nkosi

+0

JsonResultの代わりに具体的な型を返すメソッドが必要です。私がこれをやっている理由は、コントローラーのプロキシーと共有されるインターフェースにコントローラーをラップする必要があるからです。それは私が働いているアプリケーションに非常に特有です。 –

+0

あなたはなぜ 'JsonResult'に並んで' List'を返すのか明確にすることができます – Nkosi

答えて

2

私はコメントから理解していれば、私はあなたが述べたように、プロキシサービスを実装することができ、この

public interface ICtrlService { 
    List<MyObject> SomeMethod(); 
} 


public ControllerA : Controller { 
    ICtrlService service; 

    public MyController(ICtrlService service){ 
     this.service = service 
    } 

    public JsonResult SomeAction() { 
     List<MyObject> result = service.SomeMethod(); 
     return Json(result); 
    } 
} 

ような何かを探していると思います。

public class ProxyB : ICtrlService { 

    public List<MyObject> SomeMethod() {...} 

} 

あなたも、コントローラは、実際に必要な機能を提供されることを確認して、あなたのコントローラに注入された依存関係として、プロキシを使用することができます。

または、プロキシの依存関係として共通サービスを使用します。

public class ProxyB { 
    ICtrlService service; 
    public ProxyB(ICtrlService service) { 
     this.service = service; 
    } 

    public List<MyObject> SomeProxyMethod() { 
     var result = service.SomeMethod();  
     //...Do what you want with object 
     return result; 
    } 
} 

これにより、同じ共通サービス機能にアクセスできるように、プロキシがコントローラを呼び出す必要がなくなります。

+0

私が説明したことを実行することによって、コントローラが複雑になっていることに同意します。私たちの場合、ProxyBは実際にはCtrlAに要求を行うプロキシです。彼らは同じメソッドシグネチャを持ちますが、実装は異なります。同じインタフェースにそれらをラップすることは、2つのクラス間の同期を強制することを意味します。おそらくこれを達成するより良い方法があります。私はより多くの情報を探すことを試みる。コメントと回答ありがとう! –

+0

喜んで助けてください。あなたがこの答えを見つけたなら、有益な投票を自由にしてください。ありがとう。 – Nkosi

関連する問題