我在MVC中试验ServiceStack,使用标准服务器端控制器创建视图模型。在/ api注册的任何服务都没有jquery调用(或任何直接调用)。由于SS允许我们直接使用以下方法解决服务:
using (var dr = HostContext.ResolveService<DataReportService>(base.HttpContext))
我还没有使用JsonServiceClient调用服务。相反,我一直在解决服务并直接调用他们的方法。
var dataReport = new DataReport
{
IsArchived = false,
ReportDate = DateTime.Now,
ReportType = Model.ReportType
};
var drId = dr.Post(dataReport);
但是,我无法使用新的AutoQuery功能找到一种方法。我知道它会自动为任何来自QueryBase的类创建一个服务,但我没有运气解决它。如果我尝试解析运行时使用的名称,那么我就不会编译(显然)。如果我尝试这样的事情
using (var dr = HostContext.ResolveService<AutoQueryServiceBase>(base.HttpContext))
然后它也不会工作,因为那只是一个基类而不是实际注册的实例。我知道我可以从JsonServiceClient做到这一点,但我真的想尝试直接调用方法。创建我自己的包装任何AutoQuery的服务都可以工作,但似乎它违背了自动创建的目的。不过,我还没有看到任何其他方式继续下去。很想听到任何想法。
答案 0 :(得分:2)
您可以使用ResolveService<T>
方法来传递将在操作方法上执行的请求DTO,而不是使用HostContext.ServiceController.Execute
方法获取服务并自行调用执行方法。 / p>
var dataReport = new DataReport
{
IsArchived = false,
ReportDate = DateTime.Now,
ReportType = Model.ReportType
};
var drId = HostContext.ServiceController.Execute(dataReport);
我希望这会有所帮助。