解析 ServiceStack 服务并定义内容类型
Posted
技术标签:
【中文标题】解析 ServiceStack 服务并定义内容类型【英文标题】:Resolving a ServiceStack Service and defining content type 【发布时间】:2014-07-11 14:50:01 【问题描述】:我目前正在开发 C# ServiceStack API。
在其中一项服务中,我需要执行另一项服务。我从 Funq 容器解析服务并执行相关方法,但返回的是 json 而不是 .net 对象。
我理解这是因为来自前端的原始请求是针对 json 的内容类型,而默认的内容类型是 json。
有没有一种方法可以解析服务并执行其方法,但改为接收 .net 对象?
【问题讨论】:
【参考方案1】:您可以使用ResolveService<T>
执行并委托给ServiceStack 中的另一个Service,例如:
从 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;
【讨论】:
感谢您的及时回复。是的,工作一种享受。我不确定为什么我之前会返回原始 json 内容。也许我没有使用 ResolveService以上是关于解析 ServiceStack 服务并定义内容类型的主要内容,如果未能解决你的问题,请参考以下文章
ServiceStack.Text JsonSerializer 无法反序列化其自己的序列化模式(类型定义应以 '' SerializationException 开头)