【问题标题】:ServiceStack AutoQuery MVC controllerServiceStack AutoQuery MVC 控制器
【发布时间】:2014-08-18 17:22:54
【问题描述】:

我正在 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 的服务都可以,但似乎违背了自动创建的目的。不过,我看不到任何其他方法可以继续。很想听听任何想法。

【问题讨论】:

    标签: asp.net-mvc servicestack


    【解决方案1】:

    您可以使用HostContext.ServiceController.Execute 方法而不是使用ResolveService&lt;T&gt; 方法来获取服务并自己调用执行方法,该方法允许您传入将在操作方法上执行的请求DTO。

    var dataReport = new DataReport
    {
       IsArchived = false,
       ReportDate = DateTime.Now,
       ReportType = Model.ReportType
    };
    var drId = HostContext.ServiceController.Execute(dataReport);
    

    我希望这会有所帮助。

    【讨论】:

    • @Scott 当我使用 HostContext.ServiceController.Execute 时,它​​似乎无法访问现有会话。这是否意味着我必须手动传递任何会话变量?
    • @vonec Execute 方法有一个可选的第二个参数,它接受 HTTP 请求 httpReq。通过这个将允许您访问会话。 HostContext.ServiceController.Execute(requestDto, httpReq)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2013-01-27
    • 2021-10-25
    • 1970-01-01
    • 2013-07-06
    相关资源
    最近更新 更多