我正在开发一个 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?