所有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) { ... }
}