所有ClientCanSwapTemplatesAttribute确实是填充从HTTP请求参数的IRequest.Items
词典:
public class ClientCanSwapTemplatesAttribute : RequestFilterAttribute
{
public override void Execute(IRequest req, IResponse res, object requestDto)
{
req.Items["View"] = req.GetParam("View");
req.Items["Template"] = req.GetParam("Template");
}
}
所以,你可以选择这样做的Request Filter,如:
RegisterTypedRequestFilter<QueryCustomers>((req, res, dto) =>
{
req.Items["View"] = req.GetParam("View");
req.Items["Template"] = req.GetParam("Template");
});
或者以能够在AutoQuery Services上使用Filter Attributes,因为它们的实现是自动生成的,即创建一个Custom AutoQuery implementation,例如:
[ClientCanSwapTemplates]
public class MyQueryServices : Service
{
public IAutoQueryDb AutoQuery { get; set; }
//Override with custom implementation
public object Any(QueryCustomers query)
{
var q = AutoQuery.CreateQuery(query, base.Request);
return AutoQuery.Execute(request, q);
}
}
虽然在请求注解当过滤器的属性也将工作DTO,I,E:
[ClientCanSwapTemplates]
[Route("/customers", "GET")]
public class QueryCustomers { ... }
他们使用的是沮丧,因为它们会增加依赖于您的服务模式。但另一种解决方案可能是在您的AppHost构造函数中的add Attributes dynamically,e,g:
public class AppHost : AppHostBase
{
public AppHost()
{
typeof(QueryCustomers)
.AddAttributes(new ClientCanSwapTemplatesAttribute());
}
public override void Configure(Container container) { ... }
}