Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解析ServiceStack服务并定义内容类型_C#_Json_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack_Content Type - Fatal编程技术网 servicestack,content-type,C#,Json,servicestack,Content Type" /> servicestack,content-type,C#,Json,servicestack,Content Type" />

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

C# 解析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

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

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

我理解这是因为来自前端的原始请求的内容类型是json,而默认内容类型是json


是否有一种方法可以解析服务并执行其方法,但可以接收.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以执行使用缓存的方法?