解析ServiceStack服务并定义内容类型

时间:2014-05-22 13:57:56

标签: c# json servicestack content-type

我目前正在开发一个C#ServiceStack API。

在其中一项服务中,我需要执行另一项服务。我从Funq容器解析服务并执行相关方法,但返回json而不是.net对象。

我理解这是因为前端的原始请求是针对内容类型的json而默认内容类型是json。

有没有办法可以解析服务并执行其方法但是接收.net对象?

1 个答案:

答案 0 :(得分:3)

您可以使用ResolveService<T>执行并委托ServiceStack中的其他服务,例如:

从ServiceStack服务内部:

using (var service = base.ResolveService<MyService>())
{
    var response = service.Get(new MyRequest { ... });
}

从自定义用户会话中:

using (var service = authService.ResolveService<MyService>())
{
    var response = service.Get(new MyRequest { ... });
}

来自ServiceStack外部:

using (var service = HostContext.ResolveService<MyService>())
{
    var response = service.Get(new MyRequest { ... });
}

ServiceStack服务只是正常的依赖关系

由于ServiceStack中的服务就像任何其他IOC依赖项一样,ResolveService的实现只是从ServiceStack的IOC解析服务并注入当前的请求,即:

public static T ResolveService<T>(HttpContextBase httpCtx=null) 
    where T : class, IRequiresRequest
{
    var service = AssertAppHost().Container.Resolve<T>();
    if (service == null) return null;
    service.Request = httpCtx != null 
        ? httpCtx.ToRequest() 
        : HttpContext.Current.ToRequest();
    return service;
}