クライアントからのパラメーターに基づいて応答構造をカスタマイズできるようにしたい API に取り組んでいます。応答フィルターは、各サービスまたはアクションでこれを回避するために、これを行うのに適した場所のようです。問題は、アクションによって返された応答 DTO にアクセスでき、そのプロパティを変更できる一方で、オブジェクトを完全に置き換える方法や場所が見つからないことです。
応答フィルターのオブジェクトを単純に置き換えることはできませんでしたが、これは私がやろうとしていることを説明するのに役立ちます:
public class ChangeResponseAttribute : ResponseFilterAttribute
{
public override void Execute(IHttpRequest req, IHttpResponse res, object responseDto)
{
var overrideText = req.QueryString["override"];
if (!String.IsNullOrEmpty(overrideText))
responseDto = new { Message = overrideText };
}
}
[ChangeResponse]
public class TodosService : Service
{
public object Get(Todos request)
{
return new object[0];
}
}
別のオプションとして、カスタム レスポンスを直接書き込んでリクエストを終了する方法があるように見えますが、それは ServiceStack によって残された他の処理をバイパスします。
応答フィルターよりもこれを行うのに適した場所はありますか? または、弾丸を噛んで各アクションで最適な DTO を返す必要がありますか?