C# 解析ServiceStack服务并定义内容类型
我目前正在开发一个C#ServiceStack API 在其中一个服务中,我需要执行另一个服务。我从Funq容器解析服务并执行相关方法,但返回的是json而不是.net对象 我理解这是因为来自前端的原始请求的内容类型是json,而默认内容类型是jsonC# 解析ServiceStack服务并定义内容类型,c#,json,
servicestack,content-type,C#,Json,
servicestack,Content Type,我目前正在开发一个C#ServiceStack API 在其中一个服务中,我需要执行另一个服务。我从Funq容器解析服务并执行相关方法,但返回的是json而不是.net对象 我理解这是因为来自前端的原始请求的内容类型是json,而默认内容类型是json 是否有一种方法可以解析服务并执行其方法,但可以接收.net对象?您可以使用ResolveService执行并委托给ServiceStack中的另一个服务,例如: 从ServiceStack服务内部: using (var service = ba
是否有一种方法可以解析服务并执行其方法,但可以接收.net对象?您可以使用
ResolveService
执行并委托给ServiceStack中的另一个服务,例如:
从ServiceStack服务内部:
using (var service = base.ResolveService<MyService>())
{
var response = service.Get(new MyRequest { ... });
}
使用(var service=base.ResolveService())
{
var response=service.Get(新的MyRequest{…});
}
从自定义用户会话内部:
using (var service = authService.ResolveService<MyService>())
{
var response = service.Get(new MyRequest { ... });
}
使用(var service=authService.ResolveService())
{
var response=service.Get(新的MyRequest{…});
}
从ServiceStack外部:
using (var service = HostContext.ResolveService<MyService>())
{
var response = service.Get(new MyRequest { ... });
}
使用(var service=HostContext.ResolveService())
{
var response=service.Get(新的MyRequest{…});
}
ServiceStack服务只是普通的依赖项
由于ServiceStack中的服务与任何其他IOC依赖项一样,的实现只是从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;
}
公共静态解析服务(HttpContextBase httpCtx=null)
其中T:class,iRequestRequest
{
var service=AssertAppHost().Container.Resolve();
if(service==null)返回null;
service.Request=httpCtx!=null
?httpCtx.ToRequest()
:HttpContext.Current.ToRequest();
回程服务;
}
感谢您的及时回复。是的,很不错。我不知道以前为什么会返回原始json内容。也许我没有使用ResolveService。@Drammy我假设您是通过HTTP调用该服务的,例如使用JsonServiceClient。我已经知道我做错了什么-我在调用一个服务上执行Get,但传入一个CachedRequest对象,希望尽可能命中缓存。因此,我得到了一个压缩结果回来。我应该如何调用resolve a service以执行使用缓存的方法?